• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
2<!-- Generated by the JDiff Javadoc doclet -->
3<!-- (http://www.jdiff.org) -->
4<!-- on Fri Jun 17 16:00:51 EDT 2016 -->
5
6<api
7  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
8  xsi:noNamespaceSchemaLocation='api.xsd'
9  name="4.1"
10  jdversion="1.1.1">
11
12<!--  Command line arguments =  -doclet jdiff.JDiff -docletpath /tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jdiff/jdiff.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jdiff/xerces.jar -classpath /tmp/moe_git_clone_googlecode_6763913321787039468/lib/aopalliance.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/guava-19.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/javax.inject.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/asm-5.0.3.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/bnd-0.0.384.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/cglib-3.2.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/commons-logging-1.0.4.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/easymock.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/felix-2.0.5.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/guava-testlib-19.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jarjar-1.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/javax.inject-tck.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jsr305.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/junit.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/munge.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/safesax.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/spring-beans.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/spring-core.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/dagger-adapter/lib/dagger-2.4.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/antlr-2.7.5h3.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/aopalliance.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/cglib-nodep-3.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/commons-collections.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/commons-io.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/commons-logging-1.0.4.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/db4o-6.4.14.8131-java5.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/dom4j-1.6.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/easymock.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/ejb3-persistence.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/hibernate-annotations.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/hibernate-entitymanager.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/hibernate-search.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/hibernate3.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/hsqldb.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/javassist.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/jaxen-1.1-beta-7.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/jboss-archive-browsing.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/jta.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/log4j-1.2.14.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/ognl-2.6.7.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/oro-2.0.8.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/servlet-api-2.5.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/persist/lib/xwork-2.0.4.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/ant-1.6.5.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/commons-fileupload-1.2.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/commons-io-1.3.2.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/commons-logging-1.0.4.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/core-3.1.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/freemarker-2.3.16.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/javassist.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/jetty-6.1.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/jetty-util-6.1.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/jsp-2.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/jsp-api-2.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/ognl-3.0.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/servlet-api-2.5.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/struts2-core-2.2.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/extensions/struts2/lib/xwork-core-2.2.1.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/build/classes -doclet jdiff.JDiff -docletpath /tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jdiff/jdiff.jar:/tmp/moe_git_clone_googlecode_6763913321787039468/lib/build/jdiff/xerces.jar -apidir build/docs/latest-api-diffs -apiname 4.1 -->
13<package name="com.google.inject">
14  <!-- start class com.google.inject.AbstractModule -->
15  <class name="AbstractModule" extends="java.lang.Object"
16    abstract="true"
17    static="false" final="false" visibility="public"
18    deprecated="not deprecated">
19    <implements name="com.google.inject.Module"/>
20    <constructor name="AbstractModule"
21      static="false" final="false" visibility="public"
22      deprecated="not deprecated">
23    </constructor>
24    <method name="configure"
25      abstract="false" native="false" synchronized="true"
26      static="false" final="true" visibility="public"
27      deprecated="not deprecated">
28      <param name="builder" type="com.google.inject.Binder"/>
29    </method>
30    <method name="configure"
31      abstract="true" native="false" synchronized="false"
32      static="false" final="false" visibility="protected"
33      deprecated="not deprecated">
34      <doc>
35      <![CDATA[Configures a {@link Binder} via the exposed methods.]]>
36      </doc>
37    </method>
38    <method name="binder" return="com.google.inject.Binder"
39      abstract="false" native="false" synchronized="false"
40      static="false" final="false" visibility="protected"
41      deprecated="not deprecated">
42      <doc>
43      <![CDATA[Gets direct access to the underlying {@code Binder}.]]>
44      </doc>
45    </method>
46    <method name="bindScope"
47      abstract="false" native="false" synchronized="false"
48      static="false" final="false" visibility="protected"
49      deprecated="not deprecated">
50      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
51      <param name="scope" type="com.google.inject.Scope"/>
52      <doc>
53      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
54      </doc>
55    </method>
56    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
57      abstract="false" native="false" synchronized="false"
58      static="false" final="false" visibility="protected"
59      deprecated="not deprecated">
60      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
61      <doc>
62      <![CDATA[@see Binder#bind(Key)]]>
63      </doc>
64    </method>
65    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
66      abstract="false" native="false" synchronized="false"
67      static="false" final="false" visibility="protected"
68      deprecated="not deprecated">
69      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
70      <doc>
71      <![CDATA[@see Binder#bind(TypeLiteral)]]>
72      </doc>
73    </method>
74    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
75      abstract="false" native="false" synchronized="false"
76      static="false" final="false" visibility="protected"
77      deprecated="not deprecated">
78      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
79      <doc>
80      <![CDATA[@see Binder#bind(Class)]]>
81      </doc>
82    </method>
83    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
84      abstract="false" native="false" synchronized="false"
85      static="false" final="false" visibility="protected"
86      deprecated="not deprecated">
87      <doc>
88      <![CDATA[@see Binder#bindConstant()]]>
89      </doc>
90    </method>
91    <method name="install"
92      abstract="false" native="false" synchronized="false"
93      static="false" final="false" visibility="protected"
94      deprecated="not deprecated">
95      <param name="module" type="com.google.inject.Module"/>
96      <doc>
97      <![CDATA[@see Binder#install(Module)]]>
98      </doc>
99    </method>
100    <method name="addError"
101      abstract="false" native="false" synchronized="false"
102      static="false" final="false" visibility="protected"
103      deprecated="not deprecated">
104      <param name="message" type="java.lang.String"/>
105      <param name="arguments" type="java.lang.Object[]"/>
106      <doc>
107      <![CDATA[@see Binder#addError(String, Object[])]]>
108      </doc>
109    </method>
110    <method name="addError"
111      abstract="false" native="false" synchronized="false"
112      static="false" final="false" visibility="protected"
113      deprecated="not deprecated">
114      <param name="t" type="java.lang.Throwable"/>
115      <doc>
116      <![CDATA[@see Binder#addError(Throwable)]]>
117      </doc>
118    </method>
119    <method name="addError"
120      abstract="false" native="false" synchronized="false"
121      static="false" final="false" visibility="protected"
122      deprecated="not deprecated">
123      <param name="message" type="com.google.inject.spi.Message"/>
124      <doc>
125      <![CDATA[@see Binder#addError(Message)
126 @since 2.0]]>
127      </doc>
128    </method>
129    <method name="requestInjection"
130      abstract="false" native="false" synchronized="false"
131      static="false" final="false" visibility="protected"
132      deprecated="not deprecated">
133      <param name="instance" type="java.lang.Object"/>
134      <doc>
135      <![CDATA[@see Binder#requestInjection(Object)
136 @since 2.0]]>
137      </doc>
138    </method>
139    <method name="requestStaticInjection"
140      abstract="false" native="false" synchronized="false"
141      static="false" final="false" visibility="protected"
142      deprecated="not deprecated">
143      <param name="types" type="java.lang.Class[]"/>
144      <doc>
145      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
146      </doc>
147    </method>
148    <method name="bindInterceptor"
149      abstract="false" native="false" synchronized="false"
150      static="false" final="false" visibility="protected"
151      deprecated="not deprecated">
152      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
153      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
154      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
155      <doc>
156      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher,
157  com.google.inject.matcher.Matcher,
158  org.aopalliance.intercept.MethodInterceptor[])]]>
159      </doc>
160    </method>
161    <method name="requireBinding"
162      abstract="false" native="false" synchronized="false"
163      static="false" final="false" visibility="protected"
164      deprecated="not deprecated">
165      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
166      <doc>
167      <![CDATA[Adds a dependency from this module to {@code key}. When the injector is
168 created, Guice will report an error if {@code key} cannot be injected.
169 Note that this requirement may be satisfied by implicit binding, such as
170 a public no-arguments constructor.
171
172 @since 2.0]]>
173      </doc>
174    </method>
175    <method name="requireBinding"
176      abstract="false" native="false" synchronized="false"
177      static="false" final="false" visibility="protected"
178      deprecated="not deprecated">
179      <param name="type" type="java.lang.Class&lt;?&gt;"/>
180      <doc>
181      <![CDATA[Adds a dependency from this module to {@code type}. When the injector is
182 created, Guice will report an error if {@code type} cannot be injected.
183 Note that this requirement may be satisfied by implicit binding, such as
184 a public no-arguments constructor.
185
186 @since 2.0]]>
187      </doc>
188    </method>
189    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
190      abstract="false" native="false" synchronized="false"
191      static="false" final="false" visibility="protected"
192      deprecated="not deprecated">
193      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
194      <doc>
195      <![CDATA[@see Binder#getProvider(Key)
196 @since 2.0]]>
197      </doc>
198    </method>
199    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
200      abstract="false" native="false" synchronized="false"
201      static="false" final="false" visibility="protected"
202      deprecated="not deprecated">
203      <param name="type" type="java.lang.Class&lt;T&gt;"/>
204      <doc>
205      <![CDATA[@see Binder#getProvider(Class)
206 @since 2.0]]>
207      </doc>
208    </method>
209    <method name="convertToTypes"
210      abstract="false" native="false" synchronized="false"
211      static="false" final="false" visibility="protected"
212      deprecated="not deprecated">
213      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
214      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
215      <doc>
216      <![CDATA[@see Binder#convertToTypes
217 @since 2.0]]>
218      </doc>
219    </method>
220    <method name="currentStage" return="com.google.inject.Stage"
221      abstract="false" native="false" synchronized="false"
222      static="false" final="false" visibility="protected"
223      deprecated="not deprecated">
224      <doc>
225      <![CDATA[@see Binder#currentStage()
226 @since 2.0]]>
227      </doc>
228    </method>
229    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
230      abstract="false" native="false" synchronized="false"
231      static="false" final="false" visibility="protected"
232      deprecated="not deprecated">
233      <param name="type" type="java.lang.Class&lt;T&gt;"/>
234      <doc>
235      <![CDATA[@see Binder#getMembersInjector(Class)
236 @since 2.0]]>
237      </doc>
238    </method>
239    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
240      abstract="false" native="false" synchronized="false"
241      static="false" final="false" visibility="protected"
242      deprecated="not deprecated">
243      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
244      <doc>
245      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)
246 @since 2.0]]>
247      </doc>
248    </method>
249    <method name="bindListener"
250      abstract="false" native="false" synchronized="false"
251      static="false" final="false" visibility="protected"
252      deprecated="not deprecated">
253      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
254      <param name="listener" type="com.google.inject.spi.TypeListener"/>
255      <doc>
256      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher,
257  com.google.inject.spi.TypeListener)
258 @since 2.0]]>
259      </doc>
260    </method>
261    <method name="bindListener"
262      abstract="false" native="false" synchronized="false"
263      static="false" final="false" visibility="protected"
264      deprecated="not deprecated">
265      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
266      <param name="listener" type="com.google.inject.spi.ProvisionListener[]"/>
267      <doc>
268      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
269 @since 4.0]]>
270      </doc>
271    </method>
272    <doc>
273    <![CDATA[A support class for {@link Module}s which reduces repetition and results in
274 a more readable configuration. Simply extend this class, implement {@link
275 #configure()}, and call the inherited methods which mirror those found in
276 {@link Binder}. For example:
277
278 <pre>
279 public class MyModule extends AbstractModule {
280   protected void configure() {
281     bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
282     bind(CreditCardPaymentService.class);
283     bind(PaymentService.class).to(CreditCardPaymentService.class);
284     bindConstant().annotatedWith(Names.named("port")).to(8080);
285   }
286 }
287 </pre>
288
289 @author crazybob@google.com (Bob Lee)]]>
290    </doc>
291  </class>
292  <!-- end class com.google.inject.AbstractModule -->
293  <!-- start interface com.google.inject.Binder -->
294  <interface name="Binder"    abstract="true"
295    static="false" final="false" visibility="public"
296    deprecated="not deprecated">
297    <method name="bindInterceptor"
298      abstract="true" native="false" synchronized="false"
299      static="false" final="false" visibility="public"
300      deprecated="not deprecated">
301      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
302      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
303      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
304      <doc>
305      <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
306 eligible for interception if:
307
308 <ul>
309  <li>Guice created the instance the method is on</li>
310  <li>Neither the enclosing type nor the method is final</li>
311  <li>And the method is package-private, protected, or public</li>
312 </ul>
313
314 @param classMatcher matches classes the interceptor should apply to. For
315     example: {@code only(Runnable.class)}.
316 @param methodMatcher matches methods the interceptor should apply to. For
317     example: {@code annotatedWith(Transactional.class)}.
318 @param interceptors to bind.  The interceptors are called in the order they
319     are given.]]>
320      </doc>
321    </method>
322    <method name="bindScope"
323      abstract="true" native="false" synchronized="false"
324      static="false" final="false" visibility="public"
325      deprecated="not deprecated">
326      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
327      <param name="scope" type="com.google.inject.Scope"/>
328      <doc>
329      <![CDATA[Binds a scope to an annotation.]]>
330      </doc>
331    </method>
332    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
333      abstract="true" native="false" synchronized="false"
334      static="false" final="false" visibility="public"
335      deprecated="not deprecated">
336      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
337      <doc>
338      <![CDATA[See the EDSL examples at {@link Binder}.]]>
339      </doc>
340    </method>
341    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
342      abstract="true" native="false" synchronized="false"
343      static="false" final="false" visibility="public"
344      deprecated="not deprecated">
345      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
346      <doc>
347      <![CDATA[See the EDSL examples at {@link Binder}.]]>
348      </doc>
349    </method>
350    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
351      abstract="true" native="false" synchronized="false"
352      static="false" final="false" visibility="public"
353      deprecated="not deprecated">
354      <param name="type" type="java.lang.Class&lt;T&gt;"/>
355      <doc>
356      <![CDATA[See the EDSL examples at {@link Binder}.]]>
357      </doc>
358    </method>
359    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
360      abstract="true" native="false" synchronized="false"
361      static="false" final="false" visibility="public"
362      deprecated="not deprecated">
363      <doc>
364      <![CDATA[See the EDSL examples at {@link Binder}.]]>
365      </doc>
366    </method>
367    <method name="requestInjection"
368      abstract="true" native="false" synchronized="false"
369      static="false" final="false" visibility="public"
370      deprecated="not deprecated">
371      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
372      <param name="instance" type="T"/>
373      <doc>
374      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
375 and methods of the given object.
376
377 @param type of instance
378 @param instance for which members will be injected
379 @since 2.0]]>
380      </doc>
381    </method>
382    <method name="requestInjection"
383      abstract="true" native="false" synchronized="false"
384      static="false" final="false" visibility="public"
385      deprecated="not deprecated">
386      <param name="instance" type="java.lang.Object"/>
387      <doc>
388      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
389 and methods of the given object.
390
391 @param instance for which members will be injected
392 @since 2.0]]>
393      </doc>
394    </method>
395    <method name="requestStaticInjection"
396      abstract="true" native="false" synchronized="false"
397      static="false" final="false" visibility="public"
398      deprecated="not deprecated">
399      <param name="types" type="java.lang.Class[]"/>
400      <doc>
401      <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
402 and methods in the given classes.
403
404 @param types for which static members will be injected]]>
405      </doc>
406    </method>
407    <method name="install"
408      abstract="true" native="false" synchronized="false"
409      static="false" final="false" visibility="public"
410      deprecated="not deprecated">
411      <param name="module" type="com.google.inject.Module"/>
412      <doc>
413      <![CDATA[Uses the given module to configure more bindings.]]>
414      </doc>
415    </method>
416    <method name="currentStage" return="com.google.inject.Stage"
417      abstract="true" native="false" synchronized="false"
418      static="false" final="false" visibility="public"
419      deprecated="not deprecated">
420      <doc>
421      <![CDATA[Gets the current stage.]]>
422      </doc>
423    </method>
424    <method name="addError"
425      abstract="true" native="false" synchronized="false"
426      static="false" final="false" visibility="public"
427      deprecated="not deprecated">
428      <param name="message" type="java.lang.String"/>
429      <param name="arguments" type="java.lang.Object[]"/>
430      <doc>
431      <![CDATA[Records an error message which will be presented to the user at a later
432 time. Unlike throwing an exception, this enable us to continue
433 configuring the Injector and discover more errors. Uses {@link
434 String#format(String, Object[])} to insert the arguments into the
435 message.]]>
436      </doc>
437    </method>
438    <method name="addError"
439      abstract="true" native="false" synchronized="false"
440      static="false" final="false" visibility="public"
441      deprecated="not deprecated">
442      <param name="t" type="java.lang.Throwable"/>
443      <doc>
444      <![CDATA[Records an exception, the full details of which will be logged, and the
445 message of which will be presented to the user at a later
446 time. If your Module calls something that you worry may fail, you should
447 catch the exception and pass it into this.]]>
448      </doc>
449    </method>
450    <method name="addError"
451      abstract="true" native="false" synchronized="false"
452      static="false" final="false" visibility="public"
453      deprecated="not deprecated">
454      <param name="message" type="com.google.inject.spi.Message"/>
455      <doc>
456      <![CDATA[Records an error message to be presented to the user at a later time.
457
458 @since 2.0]]>
459      </doc>
460    </method>
461    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
462      abstract="true" native="false" synchronized="false"
463      static="false" final="false" visibility="public"
464      deprecated="not deprecated">
465      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
466      <doc>
467      <![CDATA[Returns the provider used to obtain instances for the given injection key.
468 The returned provider will not be valid until the {@link Injector} has been
469 created. The provider will throw an {@code IllegalStateException} if you
470 try to use it beforehand.
471
472 @since 2.0]]>
473      </doc>
474    </method>
475    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
476      abstract="true" native="false" synchronized="false"
477      static="false" final="false" visibility="public"
478      deprecated="not deprecated">
479      <param name="dependency" type="com.google.inject.spi.Dependency&lt;T&gt;"/>
480      <doc>
481      <![CDATA[Returns the provider used to obtain instances for the given injection key.
482 The returned provider will be attached to the injection point and will
483 follow the nullability specified in the dependency.
484 Additionally, the returned provider will not be valid until the {@link Injector}
485 has been created. The provider will throw an {@code IllegalStateException} if you
486 try to use it beforehand.
487
488 @since 4.0]]>
489      </doc>
490    </method>
491    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
492      abstract="true" native="false" synchronized="false"
493      static="false" final="false" visibility="public"
494      deprecated="not deprecated">
495      <param name="type" type="java.lang.Class&lt;T&gt;"/>
496      <doc>
497      <![CDATA[Returns the provider used to obtain instances for the given injection type.
498 The returned provider will not be valid until the {@link Injector} has been
499 created. The provider will throw an {@code IllegalStateException} if you
500 try to use it beforehand.
501
502 @since 2.0]]>
503      </doc>
504    </method>
505    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
506      abstract="true" native="false" synchronized="false"
507      static="false" final="false" visibility="public"
508      deprecated="not deprecated">
509      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
510      <doc>
511      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
512 of the given type {@code T}. The returned members injector will not be valid until the main
513 {@link Injector} has been created. The members injector will throw an {@code
514 IllegalStateException} if you try to use it beforehand.
515
516 @param typeLiteral type to get members injector for
517 @since 2.0]]>
518      </doc>
519    </method>
520    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
521      abstract="true" native="false" synchronized="false"
522      static="false" final="false" visibility="public"
523      deprecated="not deprecated">
524      <param name="type" type="java.lang.Class&lt;T&gt;"/>
525      <doc>
526      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
527 of the given type {@code T}. The returned members injector will not be valid until the main
528 {@link Injector} has been created. The members injector will throw an {@code
529 IllegalStateException} if you try to use it beforehand.
530
531 @param type type to get members injector for
532 @since 2.0]]>
533      </doc>
534    </method>
535    <method name="convertToTypes"
536      abstract="true" native="false" synchronized="false"
537      static="false" final="false" visibility="public"
538      deprecated="not deprecated">
539      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
540      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
541      <doc>
542      <![CDATA[Binds a type converter. The injector will use the given converter to
543 convert string constants to matching types as needed.
544
545 @param typeMatcher matches types the converter can handle
546 @param converter converts values
547 @since 2.0]]>
548      </doc>
549    </method>
550    <method name="bindListener"
551      abstract="true" native="false" synchronized="false"
552      static="false" final="false" visibility="public"
553      deprecated="not deprecated">
554      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
555      <param name="listener" type="com.google.inject.spi.TypeListener"/>
556      <doc>
557      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
558 injectable types matched by the given type matcher.
559
560 @param typeMatcher that matches injectable types the listener should be notified of
561 @param listener for injectable types matched by typeMatcher
562 @since 2.0]]>
563      </doc>
564    </method>
565    <method name="bindListener"
566      abstract="true" native="false" synchronized="false"
567      static="false" final="false" visibility="public"
568      deprecated="not deprecated">
569      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
570      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
571      <doc>
572      <![CDATA[Registers listeners for provisioned objects. Guice will notify the
573 listeners just before and after the object is provisioned. Provisioned
574 objects that are also injectable (everything except objects provided
575 through Providers) can also be notified through TypeListeners registered in
576 {@link #bindListener}.
577
578 @param bindingMatcher that matches bindings of provisioned objects the listener
579          should be notified of
580 @param listeners for provisioned objects matched by bindingMatcher
581 @since 4.0]]>
582      </doc>
583    </method>
584    <method name="withSource" return="com.google.inject.Binder"
585      abstract="true" native="false" synchronized="false"
586      static="false" final="false" visibility="public"
587      deprecated="not deprecated">
588      <param name="source" type="java.lang.Object"/>
589      <doc>
590      <![CDATA[Returns a binder that uses {@code source} as the reference location for
591 configuration errors. This is typically a {@link StackTraceElement}
592 for {@code .java} source but it could any binding source, such as the
593 path to a {@code .properties} file.
594
595 @param source any object representing the source location and has a
596     concise {@link Object#toString() toString()} value
597 @return a binder that shares its configuration with this binder
598 @since 2.0]]>
599      </doc>
600    </method>
601    <method name="skipSources" return="com.google.inject.Binder"
602      abstract="true" native="false" synchronized="false"
603      static="false" final="false" visibility="public"
604      deprecated="not deprecated">
605      <param name="classesToSkip" type="java.lang.Class[]"/>
606      <doc>
607      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
608 calling code. The caller's {@link StackTraceElement} is used to locate
609 the source of configuration errors.
610
611 @param classesToSkip library classes that create bindings on behalf of
612      their clients.
613 @return a binder that shares its configuration with this binder.
614 @since 2.0]]>
615      </doc>
616    </method>
617    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
618      abstract="true" native="false" synchronized="false"
619      static="false" final="false" visibility="public"
620      deprecated="not deprecated">
621      <doc>
622      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
623 binder can be used to add and configuration information in this environment. See {@link
624 PrivateModule} for details.
625
626 @return a binder that inherits configuration from this binder. Only exposed configuration on
627      the returned binder will be visible to this binder.
628 @since 2.0]]>
629      </doc>
630    </method>
631    <method name="requireExplicitBindings"
632      abstract="true" native="false" synchronized="false"
633      static="false" final="false" visibility="public"
634      deprecated="not deprecated">
635      <doc>
636      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
637 be injected. Classes that are not explicitly bound in a module cannot be
638 injected. Bindings created through a linked binding
639 (<code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
640 implicit binding (<code>FooImpl</code>) cannot be directly injected unless
641 it is also explicitly bound (<code>bind(FooImpl.class)</code>).
642 <p>
643 Tools can still retrieve bindings for implicit bindings (bindings created
644 through a linked binding) if explicit bindings are required, however
645 {@link Binding#getProvider} will fail.
646 <p>
647 By default, explicit bindings are not required.
648 <p>
649 If a parent injector requires explicit bindings, then all child injectors
650 (and private modules within that injector) also require explicit bindings.
651 If a parent does not require explicit bindings, a child injector or private
652 module may optionally declare itself as requiring explicit bindings. If it
653 does, the behavior is limited only to that child or any grandchildren. No
654 siblings of the child will require explicit bindings.
655 <p>
656 In the absence of an explicit binding for the target, linked bindings in
657 child injectors create a binding for the target in the parent. Since this
658 behavior can be surprising, it causes an error instead if explicit bindings
659 are required. To avoid this error, add an explicit binding for the target,
660 either in the child or the parent.
661
662 @since 3.0]]>
663      </doc>
664    </method>
665    <method name="disableCircularProxies"
666      abstract="true" native="false" synchronized="false"
667      static="false" final="false" visibility="public"
668      deprecated="not deprecated">
669      <doc>
670      <![CDATA[Prevents Guice from injecting dependencies that form a cycle, unless broken by a
671 {@link Provider}. By default, circular dependencies are not disabled.
672 <p>
673 If a parent injector disables circular dependencies, then all child injectors (and private
674 modules within that injector) also disable circular dependencies. If a parent does not disable
675 circular dependencies, a child injector or private module may optionally declare itself as
676 disabling circular dependencies. If it does, the behavior is limited only to that child or any
677 grandchildren. No siblings of the child will disable circular dependencies.
678
679 @since 3.0]]>
680      </doc>
681    </method>
682    <method name="requireAtInjectOnConstructors"
683      abstract="true" native="false" synchronized="false"
684      static="false" final="false" visibility="public"
685      deprecated="not deprecated">
686      <doc>
687      <![CDATA[Requires that a {@literal @}{@link Inject} annotation exists on a constructor in order for
688 Guice to consider it an eligible injectable class. By default, Guice will inject classes that
689 have a no-args constructor if no {@literal @}{@link Inject} annotation exists on any
690 constructor.
691 <p>
692 If the class is bound using {@link LinkedBindingBuilder#toConstructor}, Guice will still inject
693 that constructor regardless of annotations.
694
695 @since 4.0]]>
696      </doc>
697    </method>
698    <method name="requireExactBindingAnnotations"
699      abstract="true" native="false" synchronized="false"
700      static="false" final="false" visibility="public"
701      deprecated="not deprecated">
702      <doc>
703      <![CDATA[Requires that Guice finds an exactly matching binding annotation.  This disables the
704 error-prone feature in Guice where it can substitute a binding for
705 <code>{@literal @}Named Foo</code> when attempting to inject
706 <code>{@literal @}Named("foo") Foo</code>.
707
708 @since 4.0]]>
709      </doc>
710    </method>
711    <method name="scanModulesForAnnotatedMethods"
712      abstract="true" native="false" synchronized="false"
713      static="false" final="false" visibility="public"
714      deprecated="not deprecated">
715      <param name="scanner" type="com.google.inject.spi.ModuleAnnotatedMethodScanner"/>
716      <doc>
717      <![CDATA[Adds a scanner that will look in all installed modules for annotations the scanner can parse,
718 and binds them like {@literal @}Provides methods. Scanners apply to all modules installed in
719 the injector. Scanners installed in child injectors or private modules do not impact modules in
720 siblings or parents, however scanners installed in parents do apply to all child injectors and
721 private modules.
722
723 @since 4.0]]>
724      </doc>
725    </method>
726    <doc>
727    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
728 used to create an {@link Injector}. Guice provides this object to your
729 application's {@link Module} implementors so they may each contribute
730 their own bindings and other registrations.
731
732 <h3>The Guice Binding EDSL</h3>
733
734 Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
735 create bindings simply and readably.  This approach is great for overall
736 usability, but it does come with a small cost: <b>it is difficult to
737 learn how to use the Binding EDSL by reading
738 method-level javadocs</b>.  Instead, you should consult the series of
739 examples below.  To save space, these examples omit the opening
740 {@code binder}, just as you will if your module extends
741 {@link AbstractModule}.
742
743 <pre>
744     bind(ServiceImpl.class);</pre>
745
746 This statement does essentially nothing; it "binds the {@code ServiceImpl}
747 class to itself" and does not change Guice's default behavior.  You may still
748 want to use this if you prefer your {@link Module} class to serve as an
749 explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
750 Guice may be unable to validate a binding at injector creation time unless it
751 is given explicitly.
752
753 <pre>
754     bind(Service.class).to(ServiceImpl.class);</pre>
755
756 Specifies that a request for a {@code Service} instance with no binding
757 annotations should be treated as if it were a request for a
758 {@code ServiceImpl} instance. This <i>overrides</i> the function of any
759 {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
760 annotations found on {@code Service}, since Guice will have already
761 "moved on" to {@code ServiceImpl} before it reaches the point when it starts
762 looking for these annotations.
763
764 <pre>
765     bind(Service.class).toProvider(ServiceProvider.class);</pre>
766
767 In this example, {@code ServiceProvider} must extend or implement
768 {@code Provider<Service>}. This binding specifies that Guice should resolve
769 an unannotated injection request for {@code Service} by first resolving an
770 instance of {@code ServiceProvider} in the regular way, then calling
771 {@link Provider#get get()} on the resulting Provider instance to obtain the
772 {@code Service} instance.
773
774 <p>The {@link Provider} you use here does not have to be a "factory"; that
775 is, a provider which always <i>creates</i> each instance it provides.
776 However, this is generally a good practice to follow.  You can then use
777 Guice's concept of {@link Scope scopes} to guide when creation should happen
778 -- "letting Guice work for you".
779
780 <pre>
781     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
782
783 Like the previous example, but only applies to injection requests that use
784 the binding annotation {@code @Red}.  If your module also includes bindings
785 for particular <i>values</i> of the {@code @Red} annotation (see below),
786 then this binding will serve as a "catch-all" for any values of {@code @Red}
787 that have no exact match in the bindings.
788
789 <pre>
790     bind(ServiceImpl.class).in(Singleton.class);
791     // or, alternatively
792     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
793
794 Either of these statements places the {@code ServiceImpl} class into
795 singleton scope.  Guice will create only one instance of {@code ServiceImpl}
796 and will reuse it for all injection requests of this type.  Note that it is
797 still possible to bind another instance of {@code ServiceImpl} if the second
798 binding is qualified by an annotation as in the previous example.  Guice is
799 not overly concerned with <i>preventing</i> you from creating multiple
800 instances of your "singletons", only with <i>enabling</i> your application to
801 share only one instance if that's all you tell Guice you need.
802
803 <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
804 was specified with an annotation on the {@code ServiceImpl} class.
805
806 <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
807 servlet-specific scopes available in
808 {@code com.google.inject.servlet.ServletScopes}, and your Modules can
809 contribute their own custom scopes for use here as well.
810
811 <pre>
812     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
813         .to(CreditCardPaymentService.class);</pre>
814
815 This admittedly odd construct is the way to bind a parameterized type. It
816 tells Guice how to honor an injection request for an element of type
817 {@code PaymentService<CreditCard>}. The class
818 {@code CreditCardPaymentService} must implement the
819 {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
820 inject a generic type, such as {@code Set<E>}; all type parameters must be
821 fully specified.
822
823 <pre>
824     bind(Service.class).toInstance(new ServiceImpl());
825     // or, alternatively
826     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
827
828 In this example, your module itself, <i>not Guice</i>, takes responsibility
829 for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
830 this single instance to fulfill all {@code Service} injection requests.  When
831 the {@link Injector} is created, it will automatically perform field
832 and method injection for this instance, but any injectable constructor on
833 {@code ServiceImpl} is simply ignored.  Note that using this approach results
834 in "eager loading" behavior that you can't control.
835
836 <pre>
837     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
838
839 Sets up a constant binding. Constant injections must always be annotated.
840 When a constant binding's value is a string, it is eligile for conversion to
841 all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
842 {@link Class#forName class literals}. Conversions for other types can be
843 configured using {@link #convertToTypes(Matcher, TypeConverter)
844 convertToTypes()}.
845
846 <pre>
847   {@literal @}Color("red") Color red; // A member variable (field)
848    . . .
849     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
850     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
851
852 If your binding annotation has parameters you can apply different bindings to
853 different specific values of your annotation.  Getting your hands on the
854 right instance of the annotation is a bit of a pain -- one approach, shown
855 above, is to apply a prototype annotation to a field in your module class, so
856 that you can read this annotation instance and give it to Guice.
857
858 <pre>
859     bind(Service.class)
860         .annotatedWith(Names.named("blue"))
861         .to(BlueService.class);</pre>
862
863 Differentiating by names is a common enough use case that we provided a
864 standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
865 Guice's library support, binding by name is quite easier than in the
866 arbitrary binding annotation case we just saw.  However, remember that these
867 names will live in a single flat namespace with all the other names used in
868 your application.
869
870 <pre>
871     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
872     bind(ServiceImpl.class)
873         .toConstructor(loneCtor);</pre>
874
875 In this example, we directly tell Guice which constructor to use in a concrete
876 class implementation. It means that we do not need to place {@literal @}Inject
877 on any of the constructors and that Guice treats the provided constructor as though
878 it were annotated so. It is useful for cases where you cannot modify existing
879 classes and is a bit simpler than using a {@link Provider}.
880
881 <p>The above list of examples is far from exhaustive.  If you can think of
882 how the concepts of one example might coexist with the concepts from another,
883 you can most likely weave the two together.  If the two concepts make no
884 sense with each other, you most likely won't be able to do it.  In a few
885 cases Guice will let something bogus slip by, and will then inform you of
886 the problems at runtime, as soon as you try to create your Injector.
887
888 <p>The other methods of Binder such as {@link #bindScope},
889 {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
890 {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
891 you can learn how to use these in the usual way, from the method
892 documentation.
893
894 @author crazybob@google.com (Bob Lee)
895 @author jessewilson@google.com (Jesse Wilson)
896 @author kevinb@google.com (Kevin Bourrillion)]]>
897    </doc>
898  </interface>
899  <!-- end interface com.google.inject.Binder -->
900  <!-- start interface com.google.inject.Binding -->
901  <interface name="Binding"    abstract="true"
902    static="false" final="false" visibility="public"
903    deprecated="not deprecated">
904    <implements name="com.google.inject.spi.Element"/>
905    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
906      abstract="true" native="false" synchronized="false"
907      static="false" final="false" visibility="public"
908      deprecated="not deprecated">
909      <doc>
910      <![CDATA[Returns the key for this binding.]]>
911      </doc>
912    </method>
913    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
914      abstract="true" native="false" synchronized="false"
915      static="false" final="false" visibility="public"
916      deprecated="not deprecated">
917      <doc>
918      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
919 binding.
920
921 @throws UnsupportedOperationException when invoked on a {@link Binding}
922      created via {@link com.google.inject.spi.Elements#getElements}. This
923      method is only supported on {@link Binding}s returned from an injector.]]>
924      </doc>
925    </method>
926    <method name="acceptTargetVisitor" return="V"
927      abstract="true" native="false" synchronized="false"
928      static="false" final="false" visibility="public"
929      deprecated="not deprecated">
930      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
931      <doc>
932      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
933
934 @param visitor to call back on
935 @since 2.0]]>
936      </doc>
937    </method>
938    <method name="acceptScopingVisitor" return="V"
939      abstract="true" native="false" synchronized="false"
940      static="false" final="false" visibility="public"
941      deprecated="not deprecated">
942      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
943      <doc>
944      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
945
946 @param visitor to call back on
947 @since 2.0]]>
948      </doc>
949    </method>
950    <doc>
951    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
952 type. This interface is part of the introspection API and is intended primarily for use by
953 tools.
954
955 <p>Bindings are created in several ways:
956 <ul>
957     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
958         statements:
959 <pre>
960     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
961     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
962     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
963         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
964         default constructor.</li>
965     <li>By converting a bound instance to a different type.</li>
966     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
967 </ul>
968
969
970 <p>They exist on both modules and on injectors, and their behaviour is different for each:
971 <ul>
972     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
973         This is because the applicable scopes and interceptors may not be known until an injector
974         is created. From a tool's perspective, module bindings are like the injector's source
975         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
976     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
977         instances. From a tools' perspective, injector bindings are like reflection for an
978         injector. They have full runtime information, including the complete graph of injections
979         necessary to satisfy a binding.</li>
980 </ul>
981
982 @param <T> the bound type. The injected is always assignable to this type.
983
984 @author crazybob@google.com (Bob Lee)
985 @author jessewilson@google.com (Jesse Wilson)]]>
986    </doc>
987  </interface>
988  <!-- end interface com.google.inject.Binding -->
989  <!-- start class com.google.inject.BindingAnnotation -->
990  <class name="BindingAnnotation"    abstract="true"
991    static="false" final="false" visibility="public"
992    deprecated="not deprecated">
993    <implements name="java.lang.annotation.Annotation"/>
994    <doc>
995    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
996 may apply to a single injection point. You must also annotate binder
997 annotations with {@code @Retention(RUNTIME)}. For example:
998
999 <pre>
1000   {@code @}Retention(RUNTIME)
1001   {@code @}Target({ FIELD, PARAMETER, METHOD })
1002   {@code @}BindingAnnotation
1003   public {@code @}interface Transactional {}
1004 </pre>
1005
1006 @author crazybob@google.com (Bob Lee)]]>
1007    </doc>
1008  </class>
1009  <!-- end class com.google.inject.BindingAnnotation -->
1010  <!-- start class com.google.inject.ConfigurationException -->
1011  <class name="ConfigurationException" extends="java.lang.RuntimeException"
1012    abstract="false"
1013    static="false" final="true" visibility="public"
1014    deprecated="not deprecated">
1015    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
1016      static="false" final="false" visibility="public"
1017      deprecated="not deprecated">
1018      <doc>
1019      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
1020      </doc>
1021    </constructor>
1022    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
1023      abstract="false" native="false" synchronized="false"
1024      static="false" final="false" visibility="public"
1025      deprecated="not deprecated">
1026      <param name="partialValue" type="java.lang.Object"/>
1027      <doc>
1028      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
1029      </doc>
1030    </method>
1031    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1032      abstract="false" native="false" synchronized="false"
1033      static="false" final="false" visibility="public"
1034      deprecated="not deprecated">
1035      <doc>
1036      <![CDATA[Returns messages for the errors that caused this exception.]]>
1037      </doc>
1038    </method>
1039    <method name="getPartialValue" return="E"
1040      abstract="false" native="false" synchronized="false"
1041      static="false" final="false" visibility="public"
1042      deprecated="not deprecated">
1043      <doc>
1044      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
1045 this while collecting additional configuration problems.
1046
1047 @return the partial value, or {@code null} if none was set. The type of the partial value is
1048      specified by the throwing method.]]>
1049      </doc>
1050    </method>
1051    <method name="getMessage" return="java.lang.String"
1052      abstract="false" native="false" synchronized="false"
1053      static="false" final="false" visibility="public"
1054      deprecated="not deprecated">
1055    </method>
1056    <doc>
1057    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
1058 scope is found. Clients should catch this exception, log it, and stop execution.
1059
1060 @author jessewilson@google.com (Jesse Wilson)
1061 @since 2.0]]>
1062    </doc>
1063  </class>
1064  <!-- end class com.google.inject.ConfigurationException -->
1065  <!-- start class com.google.inject.CreationException -->
1066  <class name="CreationException" extends="java.lang.RuntimeException"
1067    abstract="false"
1068    static="false" final="false" visibility="public"
1069    deprecated="not deprecated">
1070    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1071      static="false" final="false" visibility="public"
1072      deprecated="not deprecated">
1073      <doc>
1074      <![CDATA[Creates a CreationException containing {@code messages}.]]>
1075      </doc>
1076    </constructor>
1077    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1078      abstract="false" native="false" synchronized="false"
1079      static="false" final="false" visibility="public"
1080      deprecated="not deprecated">
1081      <doc>
1082      <![CDATA[Returns messages for the errors that caused this exception.]]>
1083      </doc>
1084    </method>
1085    <method name="getMessage" return="java.lang.String"
1086      abstract="false" native="false" synchronized="false"
1087      static="false" final="false" visibility="public"
1088      deprecated="not deprecated">
1089    </method>
1090    <doc>
1091    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1092 errors. Clients should catch this exception, log it, and stop execution.
1093
1094 @author crazybob@google.com (Bob Lee)]]>
1095    </doc>
1096  </class>
1097  <!-- end class com.google.inject.CreationException -->
1098  <!-- start class com.google.inject.Exposed -->
1099  <class name="Exposed"    abstract="true"
1100    static="false" final="false" visibility="public"
1101    deprecated="not deprecated">
1102    <implements name="java.lang.annotation.Annotation"/>
1103    <doc>
1104    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1105 private module to indicate that the provided binding is exposed.
1106
1107 @author jessewilson@google.com (Jesse Wilson)
1108 @since 2.0]]>
1109    </doc>
1110  </class>
1111  <!-- end class com.google.inject.Exposed -->
1112  <!-- start class com.google.inject.Guice -->
1113  <class name="Guice" extends="java.lang.Object"
1114    abstract="false"
1115    static="false" final="true" visibility="public"
1116    deprecated="not deprecated">
1117    <method name="createInjector" return="com.google.inject.Injector"
1118      abstract="false" native="false" synchronized="false"
1119      static="true" final="false" visibility="public"
1120      deprecated="not deprecated">
1121      <param name="modules" type="com.google.inject.Module[]"/>
1122      <doc>
1123      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1124 calling {@link #createInjector(Stage, Module...)} with Stage.DEVELOPMENT.
1125
1126 @throws CreationException if one or more errors occur during injector
1127     construction]]>
1128      </doc>
1129    </method>
1130    <method name="createInjector" return="com.google.inject.Injector"
1131      abstract="false" native="false" synchronized="false"
1132      static="true" final="false" visibility="public"
1133      deprecated="not deprecated">
1134      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1135      <doc>
1136      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1137 calling {@link #createInjector(Stage, Iterable)} with Stage.DEVELOPMENT.
1138
1139 @throws CreationException if one or more errors occur during injector
1140     creation]]>
1141      </doc>
1142    </method>
1143    <method name="createInjector" return="com.google.inject.Injector"
1144      abstract="false" native="false" synchronized="false"
1145      static="true" final="false" visibility="public"
1146      deprecated="not deprecated">
1147      <param name="stage" type="com.google.inject.Stage"/>
1148      <param name="modules" type="com.google.inject.Module[]"/>
1149      <doc>
1150      <![CDATA[Creates an injector for the given set of modules, in a given development
1151 stage.
1152
1153 @throws CreationException if one or more errors occur during injector
1154     creation.]]>
1155      </doc>
1156    </method>
1157    <method name="createInjector" return="com.google.inject.Injector"
1158      abstract="false" native="false" synchronized="false"
1159      static="true" final="false" visibility="public"
1160      deprecated="not deprecated">
1161      <param name="stage" type="com.google.inject.Stage"/>
1162      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1163      <doc>
1164      <![CDATA[Creates an injector for the given set of modules, in a given development
1165 stage.
1166
1167 @throws CreationException if one or more errors occur during injector
1168     construction]]>
1169      </doc>
1170    </method>
1171    <doc>
1172    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1173 {@link Module}s.
1174
1175 <p>Guice supports a model of development that draws clear boundaries between
1176 APIs, Implementations of these APIs, Modules which configure these
1177 implementations, and finally Applications which consist of a collection of
1178 Modules. It is the Application, which typically defines your {@code main()}
1179 method, that bootstraps the Guice Injector using the {@code Guice} class, as
1180 in this example:
1181 <pre>
1182     public class FooApplication {
1183       public static void main(String[] args) {
1184         Injector injector = Guice.createInjector(
1185             new ModuleA(),
1186             new ModuleB(),
1187             . . .
1188             new FooApplicationFlagsModule(args)
1189         );
1190
1191         // Now just bootstrap the application and you're done
1192         FooStarter starter = injector.getInstance(FooStarter.class);
1193         starter.runApplication();
1194       }
1195     }
1196 </pre>]]>
1197    </doc>
1198  </class>
1199  <!-- end class com.google.inject.Guice -->
1200  <!-- start class com.google.inject.ImplementedBy -->
1201  <class name="ImplementedBy"    abstract="true"
1202    static="false" final="false" visibility="public"
1203    deprecated="not deprecated">
1204    <implements name="java.lang.annotation.Annotation"/>
1205    <doc>
1206    <![CDATA[A pointer to the default implementation of a type.
1207
1208 @author crazybob@google.com (Bob Lee)]]>
1209    </doc>
1210  </class>
1211  <!-- end class com.google.inject.ImplementedBy -->
1212  <!-- start class com.google.inject.Inject -->
1213  <class name="Inject"    abstract="true"
1214    static="false" final="false" visibility="public"
1215    deprecated="not deprecated">
1216    <implements name="java.lang.annotation.Annotation"/>
1217    <doc>
1218    <![CDATA[Annotates members of your implementation class (constructors, methods
1219 and fields) into which the {@link Injector} should inject values.
1220 The Injector fulfills injection requests for:
1221
1222 <ul>
1223 <li>Every instance it constructs. The class being constructed must have
1224 exactly one of its constructors marked with {@code @Inject} or must have a
1225 constructor taking no parameters. The Injector then proceeds to perform
1226 field and method injections.
1227
1228 <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1229 {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1230 {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(javax.inject.Provider)}.
1231 In this case all constructors are, of course, ignored.
1232
1233 <li>Static fields and methods of classes which any {@link Module} has
1234 specifically requested static injection for, using
1235 {@link Binder#requestStaticInjection}.
1236 </ul>
1237
1238 In all cases, a member can be injected regardless of its Java access
1239 specifier (private, default, protected, public).
1240
1241 @author crazybob@google.com (Bob Lee)]]>
1242    </doc>
1243  </class>
1244  <!-- end class com.google.inject.Inject -->
1245  <!-- start interface com.google.inject.Injector -->
1246  <interface name="Injector"    abstract="true"
1247    static="false" final="false" visibility="public"
1248    deprecated="not deprecated">
1249    <method name="injectMembers"
1250      abstract="true" native="false" synchronized="false"
1251      static="false" final="false" visibility="public"
1252      deprecated="not deprecated">
1253      <param name="instance" type="java.lang.Object"/>
1254      <doc>
1255      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1256 absence of an injectable constructor.
1257
1258 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1259 performing constructor injection), so if you're able to let Guice create all your objects for
1260 you, you'll never need to use this method.
1261
1262 @param instance to inject members on
1263
1264 @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1265  run time]]>
1266      </doc>
1267    </method>
1268    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1269      abstract="true" native="false" synchronized="false"
1270      static="false" final="false" visibility="public"
1271      deprecated="not deprecated">
1272      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1273      <doc>
1274      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1275 of the given type {@code T}.
1276
1277 @param typeLiteral type to get members injector for
1278 @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1279  detection
1280 @since 2.0]]>
1281      </doc>
1282    </method>
1283    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1284      abstract="true" native="false" synchronized="false"
1285      static="false" final="false" visibility="public"
1286      deprecated="not deprecated">
1287      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1288      <doc>
1289      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1290 of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1291 instead to get increased up front error detection.
1292
1293 @param type type to get members injector for
1294 @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1295  detection
1296 @since 2.0]]>
1297      </doc>
1298    </method>
1299    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1300      abstract="true" native="false" synchronized="false"
1301      static="false" final="false" visibility="public"
1302      deprecated="not deprecated">
1303      <doc>
1304      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1305
1306 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1307 injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1308 its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1309 which bindings appear in user Modules.
1310
1311 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1312      </doc>
1313    </method>
1314    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1315      abstract="true" native="false" synchronized="false"
1316      static="false" final="false" visibility="public"
1317      deprecated="not deprecated">
1318      <doc>
1319      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1320 just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1321 present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1322 additional just-in-time bindings.
1323
1324 <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1325 injector}, should one exist.
1326
1327 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1328
1329 @since 3.0]]>
1330      </doc>
1331    </method>
1332    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1333      abstract="true" native="false" synchronized="false"
1334      static="false" final="false" visibility="public"
1335      deprecated="not deprecated">
1336      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1337      <doc>
1338      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1339 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1340 be created if necessary.
1341
1342 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1343
1344 @throws ConfigurationException if this injector cannot find or create the binding.]]>
1345      </doc>
1346    </method>
1347    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1348      abstract="true" native="false" synchronized="false"
1349      static="false" final="false" visibility="public"
1350      deprecated="not deprecated">
1351      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1352      <doc>
1353      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1354 was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1355 be created if necessary.
1356
1357 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1358
1359 @throws ConfigurationException if this injector cannot find or create the binding.
1360 @since 2.0]]>
1361      </doc>
1362    </method>
1363    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1364      abstract="true" native="false" synchronized="false"
1365      static="false" final="false" visibility="public"
1366      deprecated="not deprecated">
1367      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1368      <doc>
1369      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1370 {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1371 for keys that aren't bound.
1372
1373 <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1374
1375 @since 3.0]]>
1376      </doc>
1377    </method>
1378    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1379      abstract="true" native="false" synchronized="false"
1380      static="false" final="false" visibility="public"
1381      deprecated="not deprecated">
1382      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1383      <doc>
1384      <![CDATA[Returns all explicit bindings for {@code type}.
1385
1386 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1387      </doc>
1388    </method>
1389    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1390      abstract="true" native="false" synchronized="false"
1391      static="false" final="false" visibility="public"
1392      deprecated="not deprecated">
1393      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1394      <doc>
1395      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1396 using this method, in favor of having Guice inject your dependencies ahead of time.
1397
1398 @throws ConfigurationException if this injector cannot find or create the provider.
1399 @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1400      </doc>
1401    </method>
1402    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1403      abstract="true" native="false" synchronized="false"
1404      static="false" final="false" visibility="public"
1405      deprecated="not deprecated">
1406      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1407      <doc>
1408      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1409 using this method, in favor of having Guice inject your dependencies ahead of time.
1410
1411 @throws ConfigurationException if this injector cannot find or create the provider.
1412 @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1413      </doc>
1414    </method>
1415    <method name="getInstance" return="T"
1416      abstract="true" native="false" synchronized="false"
1417      static="false" final="false" visibility="public"
1418      deprecated="not deprecated">
1419      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1420      <doc>
1421      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1422 getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1423 inject your dependencies ahead of time.
1424
1425 @throws ConfigurationException if this injector cannot find or create the provider.
1426 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1427      </doc>
1428    </method>
1429    <method name="getInstance" return="T"
1430      abstract="true" native="false" synchronized="false"
1431      static="false" final="false" visibility="public"
1432      deprecated="not deprecated">
1433      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1434      <doc>
1435      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1436 getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1437 inject your dependencies ahead of time.
1438
1439 @throws ConfigurationException if this injector cannot find or create the provider.
1440 @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1441      </doc>
1442    </method>
1443    <method name="getParent" return="com.google.inject.Injector"
1444      abstract="true" native="false" synchronized="false"
1445      static="false" final="false" visibility="public"
1446      deprecated="not deprecated">
1447      <doc>
1448      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1449
1450 @since 2.0]]>
1451      </doc>
1452    </method>
1453    <method name="createChildInjector" return="com.google.inject.Injector"
1454      abstract="true" native="false" synchronized="false"
1455      static="false" final="false" visibility="public"
1456      deprecated="not deprecated">
1457      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1458      <doc>
1459      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1460 interceptors and type converters are inherited -- they are visible to the child injector.
1461 Elements of the child injector are not visible to its parent.
1462
1463 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1464 whenever possible. This allows for scoped instances to be shared between injectors. Use
1465 explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1466 injections in just-in-time bindings (created in the parent injector) may be silently
1467 ignored if the optional dependencies are from the child injector.
1468
1469 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1470 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1471 injector to itself.
1472
1473 @since 2.0]]>
1474      </doc>
1475    </method>
1476    <method name="createChildInjector" return="com.google.inject.Injector"
1477      abstract="true" native="false" synchronized="false"
1478      static="false" final="false" visibility="public"
1479      deprecated="not deprecated">
1480      <param name="modules" type="com.google.inject.Module[]"/>
1481      <doc>
1482      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1483 interceptors and type converters are inherited -- they are visible to the child injector.
1484 Elements of the child injector are not visible to its parent.
1485
1486 <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1487 whenever possible. This allows for scoped instances to be shared between injectors. Use
1488 explicit bindings to prevent bindings from being shared with the parent injector.
1489
1490 <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1491 bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1492 injector to itself.
1493
1494 @since 2.0]]>
1495      </doc>
1496    </method>
1497    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1498      abstract="true" native="false" synchronized="false"
1499      static="false" final="false" visibility="public"
1500      deprecated="not deprecated">
1501      <doc>
1502      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1503 like {@code Singleton.class}, and the values are scope instances, such as {@code
1504 Scopes.SINGLETON}. The returned map is immutable.
1505
1506 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1507
1508 @since 3.0]]>
1509      </doc>
1510    </method>
1511    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1512      abstract="true" native="false" synchronized="false"
1513      static="false" final="false" visibility="public"
1514      deprecated="not deprecated">
1515      <doc>
1516      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1517 immutable.
1518
1519 <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1520
1521 @since 3.0]]>
1522      </doc>
1523    </method>
1524    <doc>
1525    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1526 for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1527 interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1528 injection from its cousin, the service locator pattern.
1529
1530 <p>Contains several default bindings:
1531
1532 <ul>
1533 <li>This {@link Injector} instance itself
1534 <li>A {@code Provider<T>} for each binding of type {@code T}
1535 <li>The {@link java.util.logging.Logger} for the class being injected
1536 <li>The {@link Stage} in which the Injector was created
1537 </ul>
1538
1539 Injectors are created using the facade class {@link Guice}.
1540
1541 <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1542 already-constructed instances. This can be used to interoperate with objects created by other
1543 frameworks or services.
1544
1545 <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1546 the configuration of their parent injectors, but the converse does not hold.
1547
1548 <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1549 enables tools and extensions to operate on an injector reflectively.
1550
1551 @author crazybob@google.com (Bob Lee)
1552 @author jessewilson@google.com (Jesse Wilson)]]>
1553    </doc>
1554  </interface>
1555  <!-- end interface com.google.inject.Injector -->
1556  <!-- start class com.google.inject.Key -->
1557  <class name="Key" extends="java.lang.Object"
1558    abstract="false"
1559    static="false" final="false" visibility="public"
1560    deprecated="not deprecated">
1561    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1562      static="false" final="false" visibility="protected"
1563      deprecated="not deprecated">
1564      <doc>
1565      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1566
1567 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1568 parameter in the anonymous class's type hierarchy so we can reconstitute it
1569 at runtime despite erasure.
1570
1571 <p>Example usage for a binding of type {@code Foo} annotated with
1572 {@code @Bar}:
1573
1574 <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1575      </doc>
1576    </constructor>
1577    <constructor name="Key" type="java.lang.annotation.Annotation"
1578      static="false" final="false" visibility="protected"
1579      deprecated="not deprecated">
1580      <doc>
1581      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1582
1583 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1584 parameter in the anonymous class's type hierarchy so we can reconstitute it
1585 at runtime despite erasure.
1586
1587 <p>Example usage for a binding of type {@code Foo} annotated with
1588 {@code @Bar}:
1589
1590 <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1591      </doc>
1592    </constructor>
1593    <constructor name="Key"
1594      static="false" final="false" visibility="protected"
1595      deprecated="not deprecated">
1596      <doc>
1597      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1598
1599 <p>Clients create an empty anonymous subclass. Doing so embeds the type
1600 parameter in the anonymous class's type hierarchy so we can reconstitute it
1601 at runtime despite erasure.
1602
1603 <p>Example usage for a binding of type {@code Foo}:
1604
1605 <p>{@code new Key<Foo>() {}}.]]>
1606      </doc>
1607    </constructor>
1608    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1609      abstract="false" native="false" synchronized="false"
1610      static="false" final="true" visibility="public"
1611      deprecated="not deprecated">
1612      <doc>
1613      <![CDATA[Gets the key type.]]>
1614      </doc>
1615    </method>
1616    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1617      abstract="false" native="false" synchronized="false"
1618      static="false" final="true" visibility="public"
1619      deprecated="not deprecated">
1620      <doc>
1621      <![CDATA[Gets the annotation type.]]>
1622      </doc>
1623    </method>
1624    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1625      abstract="false" native="false" synchronized="false"
1626      static="false" final="true" visibility="public"
1627      deprecated="not deprecated">
1628      <doc>
1629      <![CDATA[Gets the annotation.]]>
1630      </doc>
1631    </method>
1632    <method name="equals" return="boolean"
1633      abstract="false" native="false" synchronized="false"
1634      static="false" final="true" visibility="public"
1635      deprecated="not deprecated">
1636      <param name="o" type="java.lang.Object"/>
1637    </method>
1638    <method name="hashCode" return="int"
1639      abstract="false" native="false" synchronized="false"
1640      static="false" final="true" visibility="public"
1641      deprecated="not deprecated">
1642    </method>
1643    <method name="toString" return="java.lang.String"
1644      abstract="false" native="false" synchronized="false"
1645      static="false" final="true" visibility="public"
1646      deprecated="not deprecated">
1647    </method>
1648    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1649      abstract="false" native="false" synchronized="false"
1650      static="true" final="false" visibility="public"
1651      deprecated="not deprecated">
1652      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1653      <doc>
1654      <![CDATA[Gets a key for an injection type.]]>
1655      </doc>
1656    </method>
1657    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1658      abstract="false" native="false" synchronized="false"
1659      static="true" final="false" visibility="public"
1660      deprecated="not deprecated">
1661      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1662      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1663      <doc>
1664      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1665      </doc>
1666    </method>
1667    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1668      abstract="false" native="false" synchronized="false"
1669      static="true" final="false" visibility="public"
1670      deprecated="not deprecated">
1671      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1672      <param name="annotation" type="java.lang.annotation.Annotation"/>
1673      <doc>
1674      <![CDATA[Gets a key for an injection type and an annotation.]]>
1675      </doc>
1676    </method>
1677    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1678      abstract="false" native="false" synchronized="false"
1679      static="true" final="false" visibility="public"
1680      deprecated="not deprecated">
1681      <param name="type" type="java.lang.reflect.Type"/>
1682      <doc>
1683      <![CDATA[Gets a key for an injection type.]]>
1684      </doc>
1685    </method>
1686    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1687      abstract="false" native="false" synchronized="false"
1688      static="true" final="false" visibility="public"
1689      deprecated="not deprecated">
1690      <param name="type" type="java.lang.reflect.Type"/>
1691      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1692      <doc>
1693      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1694      </doc>
1695    </method>
1696    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1697      abstract="false" native="false" synchronized="false"
1698      static="true" final="false" visibility="public"
1699      deprecated="not deprecated">
1700      <param name="type" type="java.lang.reflect.Type"/>
1701      <param name="annotation" type="java.lang.annotation.Annotation"/>
1702      <doc>
1703      <![CDATA[Gets a key for an injection type and an annotation.]]>
1704      </doc>
1705    </method>
1706    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1707      abstract="false" native="false" synchronized="false"
1708      static="true" final="false" visibility="public"
1709      deprecated="not deprecated">
1710      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1711      <doc>
1712      <![CDATA[Gets a key for an injection type.]]>
1713      </doc>
1714    </method>
1715    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1716      abstract="false" native="false" synchronized="false"
1717      static="true" final="false" visibility="public"
1718      deprecated="not deprecated">
1719      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1720      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1721      <doc>
1722      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1723      </doc>
1724    </method>
1725    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1726      abstract="false" native="false" synchronized="false"
1727      static="true" final="false" visibility="public"
1728      deprecated="not deprecated">
1729      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1730      <param name="annotation" type="java.lang.annotation.Annotation"/>
1731      <doc>
1732      <![CDATA[Gets a key for an injection type and an annotation.]]>
1733      </doc>
1734    </method>
1735    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1736      abstract="false" native="false" synchronized="false"
1737      static="false" final="false" visibility="public"
1738      deprecated="not deprecated">
1739      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1740      <doc>
1741      <![CDATA[Returns a new key of the specified type with the same annotation as this
1742 key.
1743
1744 @since 3.0]]>
1745      </doc>
1746    </method>
1747    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1748      abstract="false" native="false" synchronized="false"
1749      static="false" final="false" visibility="public"
1750      deprecated="not deprecated">
1751      <param name="type" type="java.lang.reflect.Type"/>
1752      <doc>
1753      <![CDATA[Returns a new key of the specified type with the same annotation as this
1754 key.
1755
1756 @since 3.0]]>
1757      </doc>
1758    </method>
1759    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1760      abstract="false" native="false" synchronized="false"
1761      static="false" final="false" visibility="public"
1762      deprecated="not deprecated">
1763      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1764      <doc>
1765      <![CDATA[Returns a new key of the specified type with the same annotation as this
1766 key.
1767
1768 @since 3.0]]>
1769      </doc>
1770    </method>
1771    <method name="hasAttributes" return="boolean"
1772      abstract="false" native="false" synchronized="false"
1773      static="false" final="false" visibility="public"
1774      deprecated="not deprecated">
1775      <doc>
1776      <![CDATA[Returns true if this key has annotation attributes.
1777
1778 @since 3.0]]>
1779      </doc>
1780    </method>
1781    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1782      abstract="false" native="false" synchronized="false"
1783      static="false" final="false" visibility="public"
1784      deprecated="not deprecated">
1785      <doc>
1786      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1787 annotation type.
1788
1789 @since 3.0]]>
1790      </doc>
1791    </method>
1792    <doc>
1793    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1794 Matches the type and annotation at a point of injection.
1795
1796 <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1797 match:
1798
1799 <pre>
1800   {@literal @}Inject
1801   public void setService({@literal @}Transactional Service service) {
1802     ...
1803   }
1804 </pre>
1805
1806 <p>{@code Key} supports generic types via subclassing just like {@link
1807 TypeLiteral}.
1808
1809 <p>Keys do not differentiate between primitive types (int, char, etc.) and
1810 their corresponding wrapper types (Integer, Character, etc.). Primitive
1811 types will be replaced with their wrapper types when keys are created.
1812
1813 @author crazybob@google.com (Bob Lee)]]>
1814    </doc>
1815  </class>
1816  <!-- end class com.google.inject.Key -->
1817  <!-- start interface com.google.inject.MembersInjector -->
1818  <interface name="MembersInjector"    abstract="true"
1819    static="false" final="false" visibility="public"
1820    deprecated="not deprecated">
1821    <method name="injectMembers"
1822      abstract="true" native="false" synchronized="false"
1823      static="false" final="false" visibility="public"
1824      deprecated="not deprecated">
1825      <param name="instance" type="T"/>
1826      <doc>
1827      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1828 absence of an injectable constructor.
1829
1830 <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1831 performing constructor injection), so if you're able to let Guice create all your objects for
1832 you, you'll never need to use this method.
1833
1834 @param instance to inject members on. May be {@code null}.]]>
1835      </doc>
1836    </method>
1837    <doc>
1838    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1839 presence or absence of an injectable constructor.
1840
1841 @param <T> type to inject members of
1842
1843 @author crazybob@google.com (Bob Lee)
1844 @author jessewilson@google.com (Jesse Wilson)
1845 @since 2.0]]>
1846    </doc>
1847  </interface>
1848  <!-- end interface com.google.inject.MembersInjector -->
1849  <!-- start interface com.google.inject.Module -->
1850  <interface name="Module"    abstract="true"
1851    static="false" final="false" visibility="public"
1852    deprecated="not deprecated">
1853    <method name="configure"
1854      abstract="true" native="false" synchronized="false"
1855      static="false" final="false" visibility="public"
1856      deprecated="not deprecated">
1857      <param name="binder" type="com.google.inject.Binder"/>
1858      <doc>
1859      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1860
1861 <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1862 {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1863 discovered.]]>
1864      </doc>
1865    </method>
1866    <doc>
1867    <![CDATA[A module contributes configuration information, typically interface
1868 bindings, which will be used to create an {@link Injector}. A Guice-based
1869 application is ultimately composed of little more than a set of
1870 {@code Module}s and some bootstrapping code.
1871
1872 <p>Your Module classes can use a more streamlined syntax by extending
1873 {@link AbstractModule} rather than implementing this interface directly.
1874
1875 <p>In addition to the bindings configured via {@link #configure}, bindings
1876 will be created for all methods annotated with {@literal @}{@link Provides}.
1877 Use scope and binding annotations on these methods to configure the
1878 bindings.]]>
1879    </doc>
1880  </interface>
1881  <!-- end interface com.google.inject.Module -->
1882  <!-- start class com.google.inject.OutOfScopeException -->
1883  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1884    abstract="false"
1885    static="false" final="true" visibility="public"
1886    deprecated="not deprecated">
1887    <constructor name="OutOfScopeException" type="java.lang.String"
1888      static="false" final="false" visibility="public"
1889      deprecated="not deprecated">
1890    </constructor>
1891    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1892      static="false" final="false" visibility="public"
1893      deprecated="not deprecated">
1894    </constructor>
1895    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1896      static="false" final="false" visibility="public"
1897      deprecated="not deprecated">
1898    </constructor>
1899    <doc>
1900    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1901 object while the scope in question is not currently active.
1902
1903 @author kevinb@google.com (Kevin Bourrillion)
1904 @since 2.0]]>
1905    </doc>
1906  </class>
1907  <!-- end class com.google.inject.OutOfScopeException -->
1908  <!-- start interface com.google.inject.PrivateBinder -->
1909  <interface name="PrivateBinder"    abstract="true"
1910    static="false" final="false" visibility="public"
1911    deprecated="not deprecated">
1912    <implements name="com.google.inject.Binder"/>
1913    <method name="expose"
1914      abstract="true" native="false" synchronized="false"
1915      static="false" final="false" visibility="public"
1916      deprecated="not deprecated">
1917      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1918      <doc>
1919      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1920      </doc>
1921    </method>
1922    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1923      abstract="true" native="false" synchronized="false"
1924      static="false" final="false" visibility="public"
1925      deprecated="not deprecated">
1926      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1927      <doc>
1928      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1929 com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1930 binding annotation.]]>
1931      </doc>
1932    </method>
1933    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1934      abstract="true" native="false" synchronized="false"
1935      static="false" final="false" visibility="public"
1936      deprecated="not deprecated">
1937      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1938      <doc>
1939      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1940 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1941 binding annotation.]]>
1942      </doc>
1943    </method>
1944    <method name="withSource" return="com.google.inject.PrivateBinder"
1945      abstract="true" native="false" synchronized="false"
1946      static="false" final="false" visibility="public"
1947      deprecated="not deprecated">
1948      <param name="source" type="java.lang.Object"/>
1949    </method>
1950    <method name="skipSources" return="com.google.inject.PrivateBinder"
1951      abstract="true" native="false" synchronized="false"
1952      static="false" final="false" visibility="public"
1953      deprecated="not deprecated">
1954      <param name="classesToSkip" type="java.lang.Class[]"/>
1955    </method>
1956    <doc>
1957    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1958 {@link com.google.inject.PrivateModule PrivateModule} for details.
1959
1960 @author jessewilson@google.com (Jesse Wilson)
1961 @since 2.0]]>
1962    </doc>
1963  </interface>
1964  <!-- end interface com.google.inject.PrivateBinder -->
1965  <!-- start class com.google.inject.PrivateModule -->
1966  <class name="PrivateModule" extends="java.lang.Object"
1967    abstract="true"
1968    static="false" final="false" visibility="public"
1969    deprecated="not deprecated">
1970    <implements name="com.google.inject.Module"/>
1971    <constructor name="PrivateModule"
1972      static="false" final="false" visibility="public"
1973      deprecated="not deprecated">
1974    </constructor>
1975    <method name="configure"
1976      abstract="false" native="false" synchronized="true"
1977      static="false" final="true" visibility="public"
1978      deprecated="not deprecated">
1979      <param name="binder" type="com.google.inject.Binder"/>
1980    </method>
1981    <method name="configure"
1982      abstract="true" native="false" synchronized="false"
1983      static="false" final="false" visibility="protected"
1984      deprecated="not deprecated">
1985      <doc>
1986      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1987 expose()} to make the bindings in this module available externally.]]>
1988      </doc>
1989    </method>
1990    <method name="expose"
1991      abstract="false" native="false" synchronized="false"
1992      static="false" final="true" visibility="protected"
1993      deprecated="not deprecated">
1994      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1995      <doc>
1996      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1997      </doc>
1998    </method>
1999    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2000      abstract="false" native="false" synchronized="false"
2001      static="false" final="true" visibility="protected"
2002      deprecated="not deprecated">
2003      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2004      <doc>
2005      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2006 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2007 binding annotation.]]>
2008      </doc>
2009    </method>
2010    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2011      abstract="false" native="false" synchronized="false"
2012      static="false" final="true" visibility="protected"
2013      deprecated="not deprecated">
2014      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
2015      <doc>
2016      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2017 AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2018 binding annotation.]]>
2019      </doc>
2020    </method>
2021    <method name="binder" return="com.google.inject.PrivateBinder"
2022      abstract="false" native="false" synchronized="false"
2023      static="false" final="true" visibility="protected"
2024      deprecated="not deprecated">
2025      <doc>
2026      <![CDATA[Returns the current binder.]]>
2027      </doc>
2028    </method>
2029    <method name="bindScope"
2030      abstract="false" native="false" synchronized="false"
2031      static="false" final="true" visibility="protected"
2032      deprecated="not deprecated">
2033      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2034      <param name="scope" type="com.google.inject.Scope"/>
2035      <doc>
2036      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
2037      </doc>
2038    </method>
2039    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
2040      abstract="false" native="false" synchronized="false"
2041      static="false" final="true" visibility="protected"
2042      deprecated="not deprecated">
2043      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2044      <doc>
2045      <![CDATA[@see Binder#bind(Key)]]>
2046      </doc>
2047    </method>
2048    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2049      abstract="false" native="false" synchronized="false"
2050      static="false" final="true" visibility="protected"
2051      deprecated="not deprecated">
2052      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2053      <doc>
2054      <![CDATA[@see Binder#bind(TypeLiteral)]]>
2055      </doc>
2056    </method>
2057    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2058      abstract="false" native="false" synchronized="false"
2059      static="false" final="true" visibility="protected"
2060      deprecated="not deprecated">
2061      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
2062      <doc>
2063      <![CDATA[@see Binder#bind(Class)]]>
2064      </doc>
2065    </method>
2066    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
2067      abstract="false" native="false" synchronized="false"
2068      static="false" final="true" visibility="protected"
2069      deprecated="not deprecated">
2070      <doc>
2071      <![CDATA[@see Binder#bindConstant()]]>
2072      </doc>
2073    </method>
2074    <method name="install"
2075      abstract="false" native="false" synchronized="false"
2076      static="false" final="true" visibility="protected"
2077      deprecated="not deprecated">
2078      <param name="module" type="com.google.inject.Module"/>
2079      <doc>
2080      <![CDATA[@see Binder#install(Module)]]>
2081      </doc>
2082    </method>
2083    <method name="addError"
2084      abstract="false" native="false" synchronized="false"
2085      static="false" final="true" visibility="protected"
2086      deprecated="not deprecated">
2087      <param name="message" type="java.lang.String"/>
2088      <param name="arguments" type="java.lang.Object[]"/>
2089      <doc>
2090      <![CDATA[@see Binder#addError(String, Object[])]]>
2091      </doc>
2092    </method>
2093    <method name="addError"
2094      abstract="false" native="false" synchronized="false"
2095      static="false" final="true" visibility="protected"
2096      deprecated="not deprecated">
2097      <param name="t" type="java.lang.Throwable"/>
2098      <doc>
2099      <![CDATA[@see Binder#addError(Throwable)]]>
2100      </doc>
2101    </method>
2102    <method name="addError"
2103      abstract="false" native="false" synchronized="false"
2104      static="false" final="true" visibility="protected"
2105      deprecated="not deprecated">
2106      <param name="message" type="com.google.inject.spi.Message"/>
2107      <doc>
2108      <![CDATA[@see Binder#addError(Message)]]>
2109      </doc>
2110    </method>
2111    <method name="requestInjection"
2112      abstract="false" native="false" synchronized="false"
2113      static="false" final="true" visibility="protected"
2114      deprecated="not deprecated">
2115      <param name="instance" type="java.lang.Object"/>
2116      <doc>
2117      <![CDATA[@see Binder#requestInjection(Object)]]>
2118      </doc>
2119    </method>
2120    <method name="requestStaticInjection"
2121      abstract="false" native="false" synchronized="false"
2122      static="false" final="true" visibility="protected"
2123      deprecated="not deprecated">
2124      <param name="types" type="java.lang.Class[]"/>
2125      <doc>
2126      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2127      </doc>
2128    </method>
2129    <method name="bindInterceptor"
2130      abstract="false" native="false" synchronized="false"
2131      static="false" final="true" visibility="protected"
2132      deprecated="not deprecated">
2133      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2134      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2135      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2136      <doc>
2137      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2138      </doc>
2139    </method>
2140    <method name="requireBinding"
2141      abstract="false" native="false" synchronized="false"
2142      static="false" final="true" visibility="protected"
2143      deprecated="not deprecated">
2144      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2145      <doc>
2146      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2147      </doc>
2148    </method>
2149    <method name="requireBinding"
2150      abstract="false" native="false" synchronized="false"
2151      static="false" final="true" visibility="protected"
2152      deprecated="not deprecated">
2153      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2154      <doc>
2155      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2156      </doc>
2157    </method>
2158    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2159      abstract="false" native="false" synchronized="false"
2160      static="false" final="true" visibility="protected"
2161      deprecated="not deprecated">
2162      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2163      <doc>
2164      <![CDATA[@see Binder#getProvider(Key)]]>
2165      </doc>
2166    </method>
2167    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2168      abstract="false" native="false" synchronized="false"
2169      static="false" final="true" visibility="protected"
2170      deprecated="not deprecated">
2171      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2172      <doc>
2173      <![CDATA[@see Binder#getProvider(Class)]]>
2174      </doc>
2175    </method>
2176    <method name="convertToTypes"
2177      abstract="false" native="false" synchronized="false"
2178      static="false" final="true" visibility="protected"
2179      deprecated="not deprecated">
2180      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2181      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2182      <doc>
2183      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2184      </doc>
2185    </method>
2186    <method name="currentStage" return="com.google.inject.Stage"
2187      abstract="false" native="false" synchronized="false"
2188      static="false" final="true" visibility="protected"
2189      deprecated="not deprecated">
2190      <doc>
2191      <![CDATA[@see Binder#currentStage()]]>
2192      </doc>
2193    </method>
2194    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2195      abstract="false" native="false" synchronized="false"
2196      static="false" final="false" visibility="protected"
2197      deprecated="not deprecated">
2198      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2199      <doc>
2200      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2201      </doc>
2202    </method>
2203    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2204      abstract="false" native="false" synchronized="false"
2205      static="false" final="false" visibility="protected"
2206      deprecated="not deprecated">
2207      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2208      <doc>
2209      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2210      </doc>
2211    </method>
2212    <method name="bindListener"
2213      abstract="false" native="false" synchronized="false"
2214      static="false" final="false" visibility="protected"
2215      deprecated="not deprecated">
2216      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2217      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2218      <doc>
2219      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2220      </doc>
2221    </method>
2222    <method name="bindListener"
2223      abstract="false" native="false" synchronized="false"
2224      static="false" final="false" visibility="protected"
2225      deprecated="not deprecated">
2226      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
2227      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
2228      <doc>
2229      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
2230 @since 4.0]]>
2231      </doc>
2232    </method>
2233    <doc>
2234    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2235 that are explicitly exposed will be available to other modules and to the users of the injector.
2236 This module may expose the bindings it creates and the bindings of the modules it installs.
2237
2238 <p>A private module can be nested within a regular module or within another private module using
2239 {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2240 type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2241 nest multiple private modules, the result is a tree of environments where the injector's
2242 environment is the root.
2243
2244 <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2245 com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2246 Exposed} annotation:
2247
2248 <pre>
2249 public class FooBarBazModule extends PrivateModule {
2250   protected void configure() {
2251     bind(Foo.class).to(RealFoo.class);
2252     expose(Foo.class);
2253
2254     install(new TransactionalBarModule());
2255     expose(Bar.class).annotatedWith(Transactional.class);
2256
2257     bind(SomeImplementationDetail.class);
2258     install(new MoreImplementationDetailsModule());
2259   }
2260
2261   {@literal @}Provides {@literal @}Exposed
2262   public Baz provideBaz() {
2263     return new SuperBaz();
2264   }
2265 }
2266 </pre>
2267
2268 <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2269 injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2270 root environment. Such bindings are shared among all environments in the tree.
2271
2272 <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2273 module will be unique to its environment. But a binding for the same type in a different private
2274 module will yield a different instance.
2275
2276 <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2277 access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2278 gets access to all bindings in the child environment.
2279
2280 <p>To promote a just-in-time binding to an explicit binding, bind it:
2281 <pre>
2282   bind(FooImpl.class);
2283 </pre>
2284
2285 @author jessewilson@google.com (Jesse Wilson)
2286 @since 2.0]]>
2287    </doc>
2288  </class>
2289  <!-- end class com.google.inject.PrivateModule -->
2290  <!-- start class com.google.inject.ProvidedBy -->
2291  <class name="ProvidedBy"    abstract="true"
2292    static="false" final="false" visibility="public"
2293    deprecated="not deprecated">
2294    <implements name="java.lang.annotation.Annotation"/>
2295    <doc>
2296    <![CDATA[A pointer to the default provider type for a type.
2297
2298 @author crazybob@google.com (Bob Lee)]]>
2299    </doc>
2300  </class>
2301  <!-- end class com.google.inject.ProvidedBy -->
2302  <!-- start interface com.google.inject.Provider -->
2303  <interface name="Provider"    abstract="true"
2304    static="false" final="false" visibility="public"
2305    deprecated="not deprecated">
2306    <implements name="javax.inject.Provider&lt;T&gt;"/>
2307    <method name="get" return="T"
2308      abstract="true" native="false" synchronized="false"
2309      static="false" final="false" visibility="public"
2310      deprecated="not deprecated">
2311      <doc>
2312      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2313
2314 @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2315     in question is not currently active
2316 @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2317     and throwables to describe why provision failed.]]>
2318      </doc>
2319    </method>
2320    <doc>
2321    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2322 by Guice:
2323
2324 <ul>
2325 <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2326 is insufficient for a particular binding, the module can specify a custom {@code Provider}
2327 instead, to control exactly how Guice creates or obtains instances for the binding.
2328
2329 <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2330 rather than having a {@code T} injected directly.  This may give you access to multiple
2331 instances, instances you wish to safely mutate and discard, instances which are out of scope
2332 (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2333 instances that will be initialized lazily.
2334
2335 <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2336 when to delegate to the backing provider and when to provide the instance some other way.
2337
2338 <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2339 for a given key, via the {@link Injector#getProvider} methods.
2340 </ul>
2341
2342 @param <T> the type of object this provides
2343
2344 @author crazybob@google.com (Bob Lee)]]>
2345    </doc>
2346  </interface>
2347  <!-- end interface com.google.inject.Provider -->
2348  <!-- start class com.google.inject.Provides -->
2349  <class name="Provides"    abstract="true"
2350    static="false" final="false" visibility="public"
2351    deprecated="not deprecated">
2352    <implements name="java.lang.annotation.Annotation"/>
2353    <doc>
2354    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2355 type is bound to its returned value. Guice will pass dependencies to the method as parameters.
2356
2357 @author crazybob@google.com (Bob Lee)
2358 @since 2.0]]>
2359    </doc>
2360  </class>
2361  <!-- end class com.google.inject.Provides -->
2362  <!-- start class com.google.inject.ProvisionException -->
2363  <class name="ProvisionException" extends="java.lang.RuntimeException"
2364    abstract="false"
2365    static="false" final="true" visibility="public"
2366    deprecated="not deprecated">
2367    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2368      static="false" final="false" visibility="public"
2369      deprecated="not deprecated">
2370      <doc>
2371      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2372      </doc>
2373    </constructor>
2374    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2375      static="false" final="false" visibility="public"
2376      deprecated="not deprecated">
2377    </constructor>
2378    <constructor name="ProvisionException" type="java.lang.String"
2379      static="false" final="false" visibility="public"
2380      deprecated="not deprecated">
2381    </constructor>
2382    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2383      abstract="false" native="false" synchronized="false"
2384      static="false" final="false" visibility="public"
2385      deprecated="not deprecated">
2386      <doc>
2387      <![CDATA[Returns messages for the errors that caused this exception.]]>
2388      </doc>
2389    </method>
2390    <method name="getMessage" return="java.lang.String"
2391      abstract="false" native="false" synchronized="false"
2392      static="false" final="false" visibility="public"
2393      deprecated="not deprecated">
2394    </method>
2395    <doc>
2396    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2397
2398 @author kevinb@google.com (Kevin Bourrillion)
2399 @author jessewilson@google.com (Jesse Wilson)
2400 @since 2.0]]>
2401    </doc>
2402  </class>
2403  <!-- end class com.google.inject.ProvisionException -->
2404  <!-- start interface com.google.inject.Scope -->
2405  <interface name="Scope"    abstract="true"
2406    static="false" final="false" visibility="public"
2407    deprecated="not deprecated">
2408    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2409      abstract="true" native="false" synchronized="false"
2410      static="false" final="false" visibility="public"
2411      deprecated="not deprecated">
2412      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2413      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2414      <doc>
2415      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2416 If an object does not exist in this scope, the provider can use the given
2417 unscoped provider to retrieve one.
2418
2419 <p>Scope implementations are strongly encouraged to override
2420 {@link Object#toString} in the returned provider and include the backing
2421 provider's {@code toString()} output.
2422
2423 @param key binding key
2424 @param unscoped locates an instance when one doesn't already exist in this
2425  scope.
2426 @return a new provider which only delegates to the given unscoped provider
2427  when an instance of the requested object doesn't already exist in this
2428  scope]]>
2429      </doc>
2430    </method>
2431    <method name="toString" return="java.lang.String"
2432      abstract="true" native="false" synchronized="false"
2433      static="false" final="false" visibility="public"
2434      deprecated="not deprecated">
2435      <doc>
2436      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2437 scopes that ship with guice use the descriptions
2438 {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2439 {@code "ServletScopes.REQUEST"}.]]>
2440      </doc>
2441    </method>
2442    <doc>
2443    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2444 By default, an instance created by the {@link Injector} has <i>no scope</i>,
2445 meaning it has no state from the framework's perspective -- the
2446 {@code Injector} creates it, injects it once into the class that required it,
2447 and then immediately forgets it. Associating a scope with a particular
2448 binding allows the created instance to be "remembered" and possibly used
2449 again for other injections.
2450
2451 <p>An example of a scope is {@link Scopes#SINGLETON}.
2452
2453 @author crazybob@google.com (Bob Lee)]]>
2454    </doc>
2455  </interface>
2456  <!-- end interface com.google.inject.Scope -->
2457  <!-- start class com.google.inject.ScopeAnnotation -->
2458  <class name="ScopeAnnotation"    abstract="true"
2459    static="false" final="false" visibility="public"
2460    deprecated="not deprecated">
2461    <implements name="java.lang.annotation.Annotation"/>
2462    <doc>
2463    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2464 may apply to a single implementation class. You must also annotate scope
2465 annotations with {@code @Retention(RUNTIME)}. For example:
2466
2467 <pre>
2468   {@code @}Retention(RUNTIME)
2469   {@code @}Target(TYPE, METHOD)
2470   {@code @}ScopeAnnotation
2471   public {@code @}interface SessionScoped {}
2472 </pre>
2473
2474 @author crazybob@google.com (Bob Lee)]]>
2475    </doc>
2476  </class>
2477  <!-- end class com.google.inject.ScopeAnnotation -->
2478  <!-- start class com.google.inject.Scopes -->
2479  <class name="Scopes" extends="java.lang.Object"
2480    abstract="false"
2481    static="false" final="false" visibility="public"
2482    deprecated="not deprecated">
2483    <method name="isSingleton" return="boolean"
2484      abstract="false" native="false" synchronized="false"
2485      static="true" final="false" visibility="public"
2486      deprecated="not deprecated">
2487      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2488      <doc>
2489      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2490 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2491 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2492 also true if the target binding is singleton-scoped.
2493
2494 @since 3.0]]>
2495      </doc>
2496    </method>
2497    <method name="isScoped" return="boolean"
2498      abstract="false" native="false" synchronized="false"
2499      static="true" final="false" visibility="public"
2500      deprecated="not deprecated">
2501      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2502      <param name="scope" type="com.google.inject.Scope"/>
2503      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2504      <doc>
2505      <![CDATA[Returns true if {@code binding} has the given scope. If the binding is a {@link
2506 com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2507 was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2508 also true if the target binding has the given scope.
2509
2510 @param binding binding to check
2511 @param scope scope implementation instance
2512 @param scopeAnnotation scope annotation class
2513 @since 4.0]]>
2514      </doc>
2515    </method>
2516    <method name="isCircularProxy" return="boolean"
2517      abstract="false" native="false" synchronized="false"
2518      static="true" final="false" visibility="public"
2519      deprecated="not deprecated">
2520      <param name="object" type="java.lang.Object"/>
2521      <doc>
2522      <![CDATA[Returns true if the object is a proxy for a circular dependency,
2523 constructed by Guice because it encountered a circular dependency. Scope
2524 implementations should be careful to <b>not cache circular proxies</b>,
2525 because the proxies are not intended for general purpose use. (They are
2526 designed just to fulfill the immediate injection, not all injections.
2527 Caching them can lead to IllegalArgumentExceptions or ClassCastExceptions.)
2528
2529 @since 4.0]]>
2530      </doc>
2531    </method>
2532    <field name="SINGLETON" type="com.google.inject.Scope"
2533      transient="false" volatile="false"
2534      static="true" final="true" visibility="public"
2535      deprecated="not deprecated">
2536      <doc>
2537      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2538      </doc>
2539    </field>
2540    <field name="NO_SCOPE" type="com.google.inject.Scope"
2541      transient="false" volatile="false"
2542      static="true" final="true" visibility="public"
2543      deprecated="not deprecated">
2544      <doc>
2545      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2546 Injector obtains an instance of an object with "no scope", it injects this
2547 instance then immediately forgets it.  When the next request for the same
2548 binding arrives it will need to obtain the instance over again.
2549
2550 <p>This exists only in case a class has been annotated with a scope
2551 annotation such as {@link Singleton @Singleton}, and you need to override
2552 this to "no scope" in your binding.
2553
2554 @since 2.0]]>
2555      </doc>
2556    </field>
2557    <doc>
2558    <![CDATA[Built-in scope implementations.
2559
2560 @author crazybob@google.com (Bob Lee)]]>
2561    </doc>
2562  </class>
2563  <!-- end class com.google.inject.Scopes -->
2564  <!-- start class com.google.inject.Singleton -->
2565  <class name="Singleton"    abstract="true"
2566    static="false" final="false" visibility="public"
2567    deprecated="not deprecated">
2568    <implements name="java.lang.annotation.Annotation"/>
2569    <doc>
2570    <![CDATA[Apply this to implementation classes when you want only one instance
2571 (per {@link Injector}) to be reused for all injections for that binding.
2572
2573 @author crazybob@google.com (Bob Lee)]]>
2574    </doc>
2575  </class>
2576  <!-- end class com.google.inject.Singleton -->
2577  <!-- start class com.google.inject.Stage -->
2578  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2579    abstract="false"
2580    static="false" final="true" visibility="public"
2581    deprecated="not deprecated">
2582    <method name="values" return="com.google.inject.Stage[]"
2583      abstract="false" native="false" synchronized="false"
2584      static="true" final="false" visibility="public"
2585      deprecated="not deprecated">
2586    </method>
2587    <method name="valueOf" return="com.google.inject.Stage"
2588      abstract="false" native="false" synchronized="false"
2589      static="true" final="false" visibility="public"
2590      deprecated="not deprecated">
2591      <param name="name" type="java.lang.String"/>
2592    </method>
2593    <doc>
2594    <![CDATA[The stage we're running in.
2595
2596 @author crazybob@google.com (Bob Lee)]]>
2597    </doc>
2598  </class>
2599  <!-- end class com.google.inject.Stage -->
2600  <!-- start class com.google.inject.TypeLiteral -->
2601  <class name="TypeLiteral" extends="java.lang.Object"
2602    abstract="false"
2603    static="false" final="false" visibility="public"
2604    deprecated="not deprecated">
2605    <constructor name="TypeLiteral"
2606      static="false" final="false" visibility="protected"
2607      deprecated="not deprecated">
2608      <doc>
2609      <![CDATA[Constructs a new type literal. Derives represented class from type
2610 parameter.
2611
2612 <p>Clients create an empty anonymous subclass. Doing so embeds the type
2613 parameter in the anonymous class's type hierarchy so we can reconstitute it
2614 at runtime despite erasure.]]>
2615      </doc>
2616    </constructor>
2617    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2618      abstract="false" native="false" synchronized="false"
2619      static="false" final="true" visibility="public"
2620      deprecated="not deprecated">
2621      <doc>
2622      <![CDATA[Returns the raw (non-generic) type for this type.
2623
2624 @since 2.0]]>
2625      </doc>
2626    </method>
2627    <method name="getType" return="java.lang.reflect.Type"
2628      abstract="false" native="false" synchronized="false"
2629      static="false" final="true" visibility="public"
2630      deprecated="not deprecated">
2631      <doc>
2632      <![CDATA[Gets underlying {@code Type} instance.]]>
2633      </doc>
2634    </method>
2635    <method name="hashCode" return="int"
2636      abstract="false" native="false" synchronized="false"
2637      static="false" final="true" visibility="public"
2638      deprecated="not deprecated">
2639    </method>
2640    <method name="equals" return="boolean"
2641      abstract="false" native="false" synchronized="false"
2642      static="false" final="true" visibility="public"
2643      deprecated="not deprecated">
2644      <param name="o" type="java.lang.Object"/>
2645    </method>
2646    <method name="toString" return="java.lang.String"
2647      abstract="false" native="false" synchronized="false"
2648      static="false" final="true" visibility="public"
2649      deprecated="not deprecated">
2650    </method>
2651    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2652      abstract="false" native="false" synchronized="false"
2653      static="true" final="false" visibility="public"
2654      deprecated="not deprecated">
2655      <param name="type" type="java.lang.reflect.Type"/>
2656      <doc>
2657      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2658      </doc>
2659    </method>
2660    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2661      abstract="false" native="false" synchronized="false"
2662      static="true" final="false" visibility="public"
2663      deprecated="not deprecated">
2664      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2665      <doc>
2666      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2667      </doc>
2668    </method>
2669    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2670      abstract="false" native="false" synchronized="false"
2671      static="false" final="false" visibility="public"
2672      deprecated="not deprecated">
2673      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2674      <doc>
2675      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2676 ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2677 Iterable.class}.
2678
2679 @param supertype a superclass of, or interface implemented by, this.
2680 @since 2.0]]>
2681      </doc>
2682    </method>
2683    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2684      abstract="false" native="false" synchronized="false"
2685      static="false" final="false" visibility="public"
2686      deprecated="not deprecated">
2687      <param name="field" type="java.lang.reflect.Field"/>
2688      <doc>
2689      <![CDATA[Returns the resolved generic type of {@code field}.
2690
2691 @param field a field defined by this or any superclass.
2692 @since 2.0]]>
2693      </doc>
2694    </method>
2695    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2696      abstract="false" native="false" synchronized="false"
2697      static="false" final="false" visibility="public"
2698      deprecated="not deprecated">
2699      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2700      <doc>
2701      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2702
2703 @param methodOrConstructor a method or constructor defined by this or any supertype.
2704 @since 2.0]]>
2705      </doc>
2706    </method>
2707    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2708      abstract="false" native="false" synchronized="false"
2709      static="false" final="false" visibility="public"
2710      deprecated="not deprecated">
2711      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2712      <doc>
2713      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2714
2715 @param methodOrConstructor a method or constructor defined by this or any supertype.
2716 @since 2.0]]>
2717      </doc>
2718    </method>
2719    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2720      abstract="false" native="false" synchronized="false"
2721      static="false" final="false" visibility="public"
2722      deprecated="not deprecated">
2723      <param name="method" type="java.lang.reflect.Method"/>
2724      <doc>
2725      <![CDATA[Returns the resolved generic return type of {@code method}.
2726
2727 @param method a method defined by this or any supertype.
2728 @since 2.0]]>
2729      </doc>
2730    </method>
2731    <doc>
2732    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2733 represent generic types, so this class does. Forces clients to create a
2734 subclass of this class which enables retrieval the type information even at
2735 runtime.
2736
2737 <p>For example, to create a type literal for {@code List<String>}, you can
2738 create an empty anonymous inner class:
2739
2740 <p>
2741 {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2742
2743 <p>Along with modeling generic types, this class can resolve type parameters.
2744 For example, to figure out what type {@code keySet()} returns on a {@code
2745 Map<Integer, String>}, use this code:<pre>   {@code
2746
2747   TypeLiteral<Map<Integer, String>> mapType
2748       = new TypeLiteral<Map<Integer, String>>() {};
2749   TypeLiteral<?> keySetType
2750       = mapType.getReturnType(Map.class.getMethod("keySet"));
2751   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2752
2753 @author crazybob@google.com (Bob Lee)
2754 @author jessewilson@google.com (Jesse Wilson)]]>
2755    </doc>
2756  </class>
2757  <!-- end class com.google.inject.TypeLiteral -->
2758</package>
2759<package name="com.google.inject.assistedinject">
2760  <!-- start class com.google.inject.assistedinject.Assisted -->
2761  <class name="Assisted"    abstract="true"
2762    static="false" final="false" visibility="public"
2763    deprecated="not deprecated">
2764    <implements name="java.lang.annotation.Annotation"/>
2765    <doc>
2766    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2767
2768 @author jmourits@google.com (Jerome Mourits)
2769 @author jessewilson@google.com (Jesse Wilson)]]>
2770    </doc>
2771  </class>
2772  <!-- end class com.google.inject.assistedinject.Assisted -->
2773  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2774  <class name="AssistedInject"    abstract="true"
2775    static="false" final="false" visibility="public"
2776    deprecated="not deprecated">
2777    <implements name="java.lang.annotation.Annotation"/>
2778    <doc>
2779    <![CDATA[<p>
2780 When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2781 {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2782 parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2783 annotations. The assisted parameters must exactly match one corresponding factory method within
2784 the factory interface, but the parameters do not need to be in the same order. Constructors
2785 annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2786 (such as AOP).
2787
2788 <p>
2789 <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2790 annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2791 parameters must exactly match one corresponding factory method within the factory interface and
2792 all must be in the same order as listed in the factory. In this backwards compatable mode,
2793 constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2794 none of the benefits.
2795
2796 <p>
2797 Constructor parameters must be either supplied by the factory interface and marked with
2798 <code>@Assisted</code>, or they must be injectable.
2799
2800 @author jmourits@google.com (Jerome Mourits)
2801 @author jessewilson@google.com (Jesse Wilson)]]>
2802    </doc>
2803  </class>
2804  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2805  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2806  <interface name="AssistedInjectBinding"    abstract="true"
2807    static="false" final="false" visibility="public"
2808    deprecated="not deprecated">
2809    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2810      abstract="true" native="false" synchronized="false"
2811      static="false" final="false" visibility="public"
2812      deprecated="not deprecated">
2813      <doc>
2814      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2815      </doc>
2816    </method>
2817    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2818      abstract="true" native="false" synchronized="false"
2819      static="false" final="false" visibility="public"
2820      deprecated="not deprecated">
2821      <doc>
2822      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2823      </doc>
2824    </method>
2825    <doc>
2826    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2827
2828 @param <T> The fully qualified type of the factory.
2829
2830 @since 3.0
2831 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2832    </doc>
2833  </interface>
2834  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2835  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2836  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2837    static="false" final="false" visibility="public"
2838    deprecated="not deprecated">
2839    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2840    <method name="visit" return="V"
2841      abstract="true" native="false" synchronized="false"
2842      static="false" final="false" visibility="public"
2843      deprecated="not deprecated">
2844      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2845      <doc>
2846      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2847      </doc>
2848    </method>
2849    <doc>
2850    <![CDATA[A visitor for the AssistedInject extension.
2851 <p>
2852 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2853 {@link FactoryModuleBuilder} will be visited through this interface.
2854
2855 @since 3.0
2856 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2857    </doc>
2858  </interface>
2859  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2860  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2861  <interface name="AssistedMethod"    abstract="true"
2862    static="false" final="false" visibility="public"
2863    deprecated="not deprecated">
2864    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2865      abstract="true" native="false" synchronized="false"
2866      static="false" final="false" visibility="public"
2867      deprecated="not deprecated">
2868      <doc>
2869      <![CDATA[Returns the factory method that is being assisted.]]>
2870      </doc>
2871    </method>
2872    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2873      abstract="true" native="false" synchronized="false"
2874      static="false" final="false" visibility="public"
2875      deprecated="not deprecated">
2876      <doc>
2877      <![CDATA[Returns the implementation type that will be created when the method is
2878 used.]]>
2879      </doc>
2880    </method>
2881    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2882      abstract="true" native="false" synchronized="false"
2883      static="false" final="false" visibility="public"
2884      deprecated="not deprecated">
2885      <doc>
2886      <![CDATA[Returns the constructor that will be used to construct instances of the
2887 implementation.]]>
2888      </doc>
2889    </method>
2890    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2891      abstract="true" native="false" synchronized="false"
2892      static="false" final="false" visibility="public"
2893      deprecated="not deprecated">
2894      <doc>
2895      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2896 the implementation.]]>
2897      </doc>
2898    </method>
2899    <doc>
2900    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2901
2902 @since 3.0
2903 @author ramakrishna@google.com (Ramakrishna Rajanna)]]>
2904    </doc>
2905  </interface>
2906  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2907  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2908  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2909    abstract="false"
2910    static="false" final="true" visibility="public"
2911    deprecated="not deprecated">
2912    <constructor name="FactoryModuleBuilder"
2913      static="false" final="false" visibility="public"
2914      deprecated="not deprecated">
2915    </constructor>
2916    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2917      abstract="false" native="false" synchronized="false"
2918      static="false" final="false" visibility="public"
2919      deprecated="not deprecated">
2920      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2921      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2922      <doc>
2923      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2924      </doc>
2925    </method>
2926    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2927      abstract="false" native="false" synchronized="false"
2928      static="false" final="false" visibility="public"
2929      deprecated="not deprecated">
2930      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2931      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2932      <doc>
2933      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2934      </doc>
2935    </method>
2936    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2937      abstract="false" native="false" synchronized="false"
2938      static="false" final="false" visibility="public"
2939      deprecated="not deprecated">
2940      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2941      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2942      <doc>
2943      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2944      </doc>
2945    </method>
2946    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2947      abstract="false" native="false" synchronized="false"
2948      static="false" final="false" visibility="public"
2949      deprecated="not deprecated">
2950      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2951      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2952      <doc>
2953      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2954      </doc>
2955    </method>
2956    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2957      abstract="false" native="false" synchronized="false"
2958      static="false" final="false" visibility="public"
2959      deprecated="not deprecated">
2960      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2961      <param name="annotation" type="java.lang.annotation.Annotation"/>
2962      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2963      <doc>
2964      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2965      </doc>
2966    </method>
2967    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2968      abstract="false" native="false" synchronized="false"
2969      static="false" final="false" visibility="public"
2970      deprecated="not deprecated">
2971      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2972      <param name="annotation" type="java.lang.annotation.Annotation"/>
2973      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2974      <doc>
2975      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2976      </doc>
2977    </method>
2978    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2979      abstract="false" native="false" synchronized="false"
2980      static="false" final="false" visibility="public"
2981      deprecated="not deprecated">
2982      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2983      <param name="annotation" type="java.lang.annotation.Annotation"/>
2984      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2985      <doc>
2986      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2987      </doc>
2988    </method>
2989    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2990      abstract="false" native="false" synchronized="false"
2991      static="false" final="false" visibility="public"
2992      deprecated="not deprecated">
2993      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2994      <param name="annotation" type="java.lang.annotation.Annotation"/>
2995      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2996      <doc>
2997      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2998      </doc>
2999    </method>
3000    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3001      abstract="false" native="false" synchronized="false"
3002      static="false" final="false" visibility="public"
3003      deprecated="not deprecated">
3004      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3005      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3006      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3007      <doc>
3008      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3009      </doc>
3010    </method>
3011    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3012      abstract="false" native="false" synchronized="false"
3013      static="false" final="false" visibility="public"
3014      deprecated="not deprecated">
3015      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3016      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3017      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3018      <doc>
3019      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3020      </doc>
3021    </method>
3022    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3023      abstract="false" native="false" synchronized="false"
3024      static="false" final="false" visibility="public"
3025      deprecated="not deprecated">
3026      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3027      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3028      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3029      <doc>
3030      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3031      </doc>
3032    </method>
3033    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3034      abstract="false" native="false" synchronized="false"
3035      static="false" final="false" visibility="public"
3036      deprecated="not deprecated">
3037      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3038      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3039      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3040      <doc>
3041      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3042      </doc>
3043    </method>
3044    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3045      abstract="false" native="false" synchronized="false"
3046      static="false" final="false" visibility="public"
3047      deprecated="not deprecated">
3048      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3049      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3050      <doc>
3051      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3052      </doc>
3053    </method>
3054    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3055      abstract="false" native="false" synchronized="false"
3056      static="false" final="false" visibility="public"
3057      deprecated="not deprecated">
3058      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3059      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3060      <doc>
3061      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3062      </doc>
3063    </method>
3064    <method name="build" return="com.google.inject.Module"
3065      abstract="false" native="false" synchronized="false"
3066      static="false" final="false" visibility="public"
3067      deprecated="not deprecated">
3068      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
3069      <doc>
3070      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3071      </doc>
3072    </method>
3073    <method name="build" return="com.google.inject.Module"
3074      abstract="false" native="false" synchronized="false"
3075      static="false" final="false" visibility="public"
3076      deprecated="not deprecated">
3077      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3078      <doc>
3079      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3080      </doc>
3081    </method>
3082    <method name="build" return="com.google.inject.Module"
3083      abstract="false" native="false" synchronized="false"
3084      static="false" final="false" visibility="public"
3085      deprecated="not deprecated">
3086      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
3087    </method>
3088    <doc>
3089    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
3090 construct objects.
3091
3092 <h3>Defining a factory</h3>
3093 Create an interface whose methods return the constructed type, or any of its supertypes. The
3094 method's parameters are the arguments required to build the constructed type.
3095
3096 <pre>public interface PaymentFactory {
3097   Payment create(Date startDate, Money amount);
3098 }</pre>
3099
3100 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3101 or <i>newPayment</i>.
3102
3103 <h3>Creating a type that accepts factory parameters</h3>
3104 {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
3105 Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
3106 should have parameters that match each of the factory method's parameters. Each factory-supplied
3107 parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
3108 parameter is not bound by your application's modules.
3109
3110 <pre>public class RealPayment implements Payment {
3111   {@literal @}Inject
3112   public RealPayment(
3113      CreditService creditService,
3114      AuthService authService,
3115      <strong>{@literal @}Assisted Date startDate</strong>,
3116      <strong>{@literal @}Assisted Money amount</strong>) {
3117     ...
3118   }
3119 }</pre>
3120
3121 <h3>Multiple factory methods for the same type</h3>
3122 If the factory contains many methods that return the same type, you can create multiple
3123 constructors in your concrete class, each constructor marked with with
3124 {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
3125 factory methods.
3126
3127 <pre>public interface PaymentFactory {
3128    Payment create(Date startDate, Money amount);
3129    Payment createWithoutDate(Money amount);
3130 }
3131
3132 public class RealPayment implements Payment {
3133  {@literal @}AssistedInject
3134   public RealPayment(
3135      CreditService creditService,
3136      AuthService authService,
3137     <strong>{@literal @}Assisted Date startDate</strong>,
3138     <strong>{@literal @}Assisted Money amount</strong>) {
3139     ...
3140   }
3141
3142  {@literal @}AssistedInject
3143   public RealPayment(
3144      CreditService creditService,
3145      AuthService authService,
3146     <strong>{@literal @}Assisted Money amount</strong>) {
3147     ...
3148   }
3149 }</pre>
3150
3151 <h3>Configuring simple factories</h3>
3152 In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3153 factory:
3154
3155 <pre>install(new FactoryModuleBuilder()
3156     .implement(Payment.class, RealPayment.class)
3157     .build(PaymentFactory.class));</pre>
3158
3159 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3160 factory cannot be used until the injector has been initialized.
3161
3162 <h3>Configuring complex factories</h3>
3163 Factories can create an arbitrary number of objects, one per each method.  Each factory
3164 method can be configured using <code>.implement</code>.
3165
3166 <pre>public interface OrderFactory {
3167    Payment create(Date startDate, Money amount);
3168    Shipment create(Customer customer, Item item);
3169    Receipt create(Payment payment, Shipment shipment);
3170 }
3171
3172 [...]
3173
3174 install(new FactoryModuleBuilder()
3175     .implement(Payment.class, RealPayment.class)
3176     // excluding .implement for Shipment means the implementation class
3177     // will be 'Shipment' itself, which is legal if it's not an interface.
3178     .implement(Receipt.class, RealReceipt.class)
3179     .build(OrderFactory.class));</pre>
3180 </pre>
3181
3182 <h3>Using the factory</h3>
3183 Inject your factory into your application classes. When you use the factory, your arguments
3184 will be combined with values from the injector to construct an instance.
3185
3186 <pre>public class PaymentAction {
3187   {@literal @}Inject private PaymentFactory paymentFactory;
3188
3189   public void doPayment(Money amount) {
3190     Payment payment = paymentFactory.create(new Date(), amount);
3191     payment.apply();
3192   }
3193 }</pre>
3194
3195 <h3>Making parameter types distinct</h3>
3196 The types of the factory method's parameters must be distinct. To use multiple parameters of
3197 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3198 parameters. The names must be applied to the factory method's parameters:
3199
3200 <pre>public interface PaymentFactory {
3201   Payment create(
3202       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3203       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3204       Money amount);
3205 } </pre>
3206
3207 ...and to the concrete type's constructor parameters:
3208
3209 <pre>public class RealPayment implements Payment {
3210   {@literal @}Inject
3211   public RealPayment(
3212      CreditService creditService,
3213      AuthService authService,
3214      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3215      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3216      <strong>{@literal @}Assisted</strong> Money amount) {
3217     ...
3218   }
3219 }</pre>
3220
3221 <h3>Values are created by Guice</h3>
3222 Returned factories use child injectors to create values. The values are eligible for method
3223 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3224 returned.
3225
3226 <h3>More configuration options</h3>
3227 In addition to simply specifying an implementation class for any returned type, factories' return
3228 values can be automatic or can be configured to use annotations:
3229 <p/>
3230 If you just want to return the types specified in the factory, do not configure any
3231 implementations:
3232
3233 <pre>public interface FruitFactory {
3234   Apple getApple(Color color);
3235 }
3236 ...
3237 protected void configure() {
3238   install(new FactoryModuleBuilder().build(FruitFactory.class));
3239 }</pre>
3240
3241 Note that any type returned by the factory in this manner needs to be an implementation class.
3242 <p/>
3243 To return two different implementations for the same interface from your factory, use binding
3244 annotations on your return types:
3245
3246 <pre>interface CarFactory {
3247   {@literal @}Named("fast") Car getFastCar(Color color);
3248   {@literal @}Named("clean") Car getCleanCar(Color color);
3249 }
3250 ...
3251 protected void configure() {
3252   install(new FactoryModuleBuilder()
3253       .implement(Car.class, Names.named("fast"), Porsche.class)
3254       .implement(Car.class, Names.named("clean"), Prius.class)
3255       .build(CarFactory.class));
3256 }</pre>
3257
3258 <h3>Implementation limitations</h3>
3259 As a limitation of the implementation, it is prohibited to declare a factory method that
3260 accepts a {@code Provider} as one of its arguments.
3261
3262 @since 3.0
3263 @author schmitt@google.com (Peter Schmitt)]]>
3264    </doc>
3265  </class>
3266  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3267  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3268  <class name="FactoryProvider" extends="java.lang.Object"
3269    abstract="false"
3270    static="false" final="false" visibility="public"
3271    deprecated="use {@link FactoryModuleBuilder} instead.">
3272    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3273    <implements name="com.google.inject.spi.HasDependencies"/>
3274    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3275      abstract="false" native="false" synchronized="false"
3276      static="true" final="false" visibility="public"
3277      deprecated="not deprecated">
3278      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3279      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3280    </method>
3281    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3282      abstract="false" native="false" synchronized="false"
3283      static="true" final="false" visibility="public"
3284      deprecated="not deprecated">
3285      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3286      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3287    </method>
3288    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3289      abstract="false" native="false" synchronized="false"
3290      static="false" final="false" visibility="public"
3291      deprecated="not deprecated">
3292    </method>
3293    <method name="get" return="F"
3294      abstract="false" native="false" synchronized="false"
3295      static="false" final="false" visibility="public"
3296      deprecated="not deprecated">
3297    </method>
3298    <method name="hashCode" return="int"
3299      abstract="false" native="false" synchronized="false"
3300      static="false" final="false" visibility="public"
3301      deprecated="not deprecated">
3302    </method>
3303    <method name="equals" return="boolean"
3304      abstract="false" native="false" synchronized="false"
3305      static="false" final="false" visibility="public"
3306      deprecated="not deprecated">
3307      <param name="obj" type="java.lang.Object"/>
3308    </method>
3309    <doc>
3310    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3311 additional capability.
3312
3313 <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3314 construct objects.
3315
3316 <h3>Defining a factory</h3>
3317 Create an interface whose methods return the constructed type, or any of its supertypes. The
3318 method's parameters are the arguments required to build the constructed type.
3319 <pre>public interface PaymentFactory {
3320   Payment create(Date startDate, Money amount);
3321 }</pre>
3322 You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3323 or <i>newPayment</i>.
3324
3325 <h3>Creating a type that accepts factory parameters</h3>
3326 {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3327 constructor. In addition to injector-supplied parameters, the constructor should have
3328 parameters that match each of the factory method's parameters. Each factory-supplied parameter
3329 requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3330 is not bound by your application's modules.
3331 <pre>public class RealPayment implements Payment {
3332   {@literal @}Inject
3333   public RealPayment(
3334      CreditService creditService,
3335      AuthService authService,
3336      <strong>{@literal @}Assisted Date startDate</strong>,
3337      <strong>{@literal @}Assisted Money amount</strong>) {
3338     ...
3339   }
3340 }</pre>
3341 Any parameter that permits a null value should also be annotated {@code @Nullable}.
3342
3343 <h3>Configuring factories</h3>
3344 In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3345 factory:
3346 <pre>bind(PaymentFactory.class).toProvider(
3347     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3348 As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3349 factory cannot be used until the injector has been initialized.
3350
3351 <h3>Using the factory</h3>
3352 Inject your factory into your application classes. When you use the factory, your arguments
3353 will be combined with values from the injector to construct an instance.
3354 <pre>public class PaymentAction {
3355   {@literal @}Inject private PaymentFactory paymentFactory;
3356
3357   public void doPayment(Money amount) {
3358     Payment payment = paymentFactory.create(new Date(), amount);
3359     payment.apply();
3360   }
3361 }</pre>
3362
3363 <h3>Making parameter types distinct</h3>
3364 The types of the factory method's parameters must be distinct. To use multiple parameters of
3365 the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3366 parameters. The names must be applied to the factory method's parameters:
3367
3368 <pre>public interface PaymentFactory {
3369   Payment create(
3370       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3371       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3372       Money amount);
3373 } </pre>
3374 ...and to the concrete type's constructor parameters:
3375 <pre>public class RealPayment implements Payment {
3376   {@literal @}Inject
3377   public RealPayment(
3378      CreditService creditService,
3379      AuthService authService,
3380      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3381      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3382      <strong>{@literal @}Assisted</strong> Money amount) {
3383     ...
3384   }
3385 }</pre>
3386
3387 <h3>Values are created by Guice</h3>
3388 Returned factories use child injectors to create values. The values are eligible for method
3389 interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3390 returned.
3391
3392 <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3393 Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3394 {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3395
3396 <p>Instead of matching factory method arguments to constructor parameters using their names, the
3397 <strong>parameters are matched by their order</strong>. The first factory method argument is
3398 used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3399 effect.
3400
3401 <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3402 method interception. They do receive post-construction member injection.
3403
3404 @param <F> The factory interface
3405
3406 @author jmourits@google.com (Jerome Mourits)
3407 @author jessewilson@google.com (Jesse Wilson)
3408 @author dtm@google.com (Daniel Martin)
3409
3410 @deprecated use {@link FactoryModuleBuilder} instead.]]>
3411    </doc>
3412  </class>
3413  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3414</package>
3415<package name="com.google.inject.binder">
3416  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3417  <interface name="AnnotatedBindingBuilder"    abstract="true"
3418    static="false" final="false" visibility="public"
3419    deprecated="not deprecated">
3420    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3421    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3422      abstract="true" native="false" synchronized="false"
3423      static="false" final="false" visibility="public"
3424      deprecated="not deprecated">
3425      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3426      <doc>
3427      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3428      </doc>
3429    </method>
3430    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3431      abstract="true" native="false" synchronized="false"
3432      static="false" final="false" visibility="public"
3433      deprecated="not deprecated">
3434      <param name="annotation" type="java.lang.annotation.Annotation"/>
3435      <doc>
3436      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3437      </doc>
3438    </method>
3439    <doc>
3440    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3441
3442 @author crazybob@google.com (Bob Lee)]]>
3443    </doc>
3444  </interface>
3445  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3446  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3447  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3448    static="false" final="false" visibility="public"
3449    deprecated="not deprecated">
3450    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3451      abstract="true" native="false" synchronized="false"
3452      static="false" final="false" visibility="public"
3453      deprecated="not deprecated">
3454      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3455      <doc>
3456      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3457      </doc>
3458    </method>
3459    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3460      abstract="true" native="false" synchronized="false"
3461      static="false" final="false" visibility="public"
3462      deprecated="not deprecated">
3463      <param name="annotation" type="java.lang.annotation.Annotation"/>
3464      <doc>
3465      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3466      </doc>
3467    </method>
3468    <doc>
3469    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3470
3471 @author crazybob@google.com (Bob Lee)]]>
3472    </doc>
3473  </interface>
3474  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3475  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3476  <interface name="AnnotatedElementBuilder"    abstract="true"
3477    static="false" final="false" visibility="public"
3478    deprecated="not deprecated">
3479    <method name="annotatedWith"
3480      abstract="true" native="false" synchronized="false"
3481      static="false" final="false" visibility="public"
3482      deprecated="not deprecated">
3483      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3484      <doc>
3485      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3486      </doc>
3487    </method>
3488    <method name="annotatedWith"
3489      abstract="true" native="false" synchronized="false"
3490      static="false" final="false" visibility="public"
3491      deprecated="not deprecated">
3492      <param name="annotation" type="java.lang.annotation.Annotation"/>
3493      <doc>
3494      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3495      </doc>
3496    </method>
3497    <doc>
3498    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3499
3500 @author jessewilson@google.com (Jesse Wilson)
3501 @since 2.0]]>
3502    </doc>
3503  </interface>
3504  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3505  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3506  <interface name="ConstantBindingBuilder"    abstract="true"
3507    static="false" final="false" visibility="public"
3508    deprecated="not deprecated">
3509    <method name="to"
3510      abstract="true" native="false" synchronized="false"
3511      static="false" final="false" visibility="public"
3512      deprecated="not deprecated">
3513      <param name="value" type="java.lang.String"/>
3514      <doc>
3515      <![CDATA[Binds constant to the given value.]]>
3516      </doc>
3517    </method>
3518    <method name="to"
3519      abstract="true" native="false" synchronized="false"
3520      static="false" final="false" visibility="public"
3521      deprecated="not deprecated">
3522      <param name="value" type="int"/>
3523      <doc>
3524      <![CDATA[Binds constant to the given value.]]>
3525      </doc>
3526    </method>
3527    <method name="to"
3528      abstract="true" native="false" synchronized="false"
3529      static="false" final="false" visibility="public"
3530      deprecated="not deprecated">
3531      <param name="value" type="long"/>
3532      <doc>
3533      <![CDATA[Binds constant to the given value.]]>
3534      </doc>
3535    </method>
3536    <method name="to"
3537      abstract="true" native="false" synchronized="false"
3538      static="false" final="false" visibility="public"
3539      deprecated="not deprecated">
3540      <param name="value" type="boolean"/>
3541      <doc>
3542      <![CDATA[Binds constant to the given value.]]>
3543      </doc>
3544    </method>
3545    <method name="to"
3546      abstract="true" native="false" synchronized="false"
3547      static="false" final="false" visibility="public"
3548      deprecated="not deprecated">
3549      <param name="value" type="double"/>
3550      <doc>
3551      <![CDATA[Binds constant to the given value.]]>
3552      </doc>
3553    </method>
3554    <method name="to"
3555      abstract="true" native="false" synchronized="false"
3556      static="false" final="false" visibility="public"
3557      deprecated="not deprecated">
3558      <param name="value" type="float"/>
3559      <doc>
3560      <![CDATA[Binds constant to the given value.]]>
3561      </doc>
3562    </method>
3563    <method name="to"
3564      abstract="true" native="false" synchronized="false"
3565      static="false" final="false" visibility="public"
3566      deprecated="not deprecated">
3567      <param name="value" type="short"/>
3568      <doc>
3569      <![CDATA[Binds constant to the given value.]]>
3570      </doc>
3571    </method>
3572    <method name="to"
3573      abstract="true" native="false" synchronized="false"
3574      static="false" final="false" visibility="public"
3575      deprecated="not deprecated">
3576      <param name="value" type="char"/>
3577      <doc>
3578      <![CDATA[Binds constant to the given value.]]>
3579      </doc>
3580    </method>
3581    <method name="to"
3582      abstract="true" native="false" synchronized="false"
3583      static="false" final="false" visibility="public"
3584      deprecated="not deprecated">
3585      <param name="value" type="byte"/>
3586      <doc>
3587      <![CDATA[Binds constant to the given value.
3588
3589 @since 3.0]]>
3590      </doc>
3591    </method>
3592    <method name="to"
3593      abstract="true" native="false" synchronized="false"
3594      static="false" final="false" visibility="public"
3595      deprecated="not deprecated">
3596      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3597      <doc>
3598      <![CDATA[Binds constant to the given value.]]>
3599      </doc>
3600    </method>
3601    <method name="to"
3602      abstract="true" native="false" synchronized="false"
3603      static="false" final="false" visibility="public"
3604      deprecated="not deprecated">
3605      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3606      <doc>
3607      <![CDATA[Binds constant to the given value.]]>
3608      </doc>
3609    </method>
3610    <doc>
3611    <![CDATA[Binds to a constant value.]]>
3612    </doc>
3613  </interface>
3614  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3615  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3616  <interface name="LinkedBindingBuilder"    abstract="true"
3617    static="false" final="false" visibility="public"
3618    deprecated="not deprecated">
3619    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3620    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3621      abstract="true" native="false" synchronized="false"
3622      static="false" final="false" visibility="public"
3623      deprecated="not deprecated">
3624      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3625      <doc>
3626      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3627      </doc>
3628    </method>
3629    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3630      abstract="true" native="false" synchronized="false"
3631      static="false" final="false" visibility="public"
3632      deprecated="not deprecated">
3633      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3634      <doc>
3635      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3636      </doc>
3637    </method>
3638    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3639      abstract="true" native="false" synchronized="false"
3640      static="false" final="false" visibility="public"
3641      deprecated="not deprecated">
3642      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3643      <doc>
3644      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3645      </doc>
3646    </method>
3647    <method name="toInstance"
3648      abstract="true" native="false" synchronized="false"
3649      static="false" final="false" visibility="public"
3650      deprecated="not deprecated">
3651      <param name="instance" type="T"/>
3652      <doc>
3653      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3654
3655 @see com.google.inject.Injector#injectMembers]]>
3656      </doc>
3657    </method>
3658    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3659      abstract="true" native="false" synchronized="false"
3660      static="false" final="false" visibility="public"
3661      deprecated="not deprecated">
3662      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3663      <doc>
3664      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3665
3666 @see com.google.inject.Injector#injectMembers]]>
3667      </doc>
3668    </method>
3669    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3670      abstract="true" native="false" synchronized="false"
3671      static="false" final="false" visibility="public"
3672      deprecated="not deprecated">
3673      <param name="provider" type="javax.inject.Provider&lt;? extends T&gt;"/>
3674      <doc>
3675      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3676
3677 @see com.google.inject.Injector#injectMembers
3678 @since 4.0]]>
3679      </doc>
3680    </method>
3681    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3682      abstract="true" native="false" synchronized="false"
3683      static="false" final="false" visibility="public"
3684      deprecated="not deprecated">
3685      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3686      <doc>
3687      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3688      </doc>
3689    </method>
3690    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3691      abstract="true" native="false" synchronized="false"
3692      static="false" final="false" visibility="public"
3693      deprecated="not deprecated">
3694      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3695      <doc>
3696      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3697      </doc>
3698    </method>
3699    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3700      abstract="true" native="false" synchronized="false"
3701      static="false" final="false" visibility="public"
3702      deprecated="not deprecated">
3703      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3704      <doc>
3705      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3706      </doc>
3707    </method>
3708    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3709      abstract="true" native="false" synchronized="false"
3710      static="false" final="false" visibility="public"
3711      deprecated="not deprecated">
3712      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3713      <doc>
3714      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3715
3716 @since 3.0]]>
3717      </doc>
3718    </method>
3719    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3720      abstract="true" native="false" synchronized="false"
3721      static="false" final="false" visibility="public"
3722      deprecated="not deprecated">
3723      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3724      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3725      <doc>
3726      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3727
3728 @since 3.0]]>
3729      </doc>
3730    </method>
3731    <doc>
3732    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3733
3734 @author crazybob@google.com (Bob Lee)]]>
3735    </doc>
3736  </interface>
3737  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3738  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3739  <interface name="ScopedBindingBuilder"    abstract="true"
3740    static="false" final="false" visibility="public"
3741    deprecated="not deprecated">
3742    <method name="in"
3743      abstract="true" native="false" synchronized="false"
3744      static="false" final="false" visibility="public"
3745      deprecated="not deprecated">
3746      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3747      <doc>
3748      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3749      </doc>
3750    </method>
3751    <method name="in"
3752      abstract="true" native="false" synchronized="false"
3753      static="false" final="false" visibility="public"
3754      deprecated="not deprecated">
3755      <param name="scope" type="com.google.inject.Scope"/>
3756      <doc>
3757      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3758      </doc>
3759    </method>
3760    <method name="asEagerSingleton"
3761      abstract="true" native="false" synchronized="false"
3762      static="false" final="false" visibility="public"
3763      deprecated="not deprecated">
3764      <doc>
3765      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3766 singleton-scoped binding upon creation. Useful for application
3767 initialization logic.  See the EDSL examples at
3768 {@link com.google.inject.Binder}.]]>
3769      </doc>
3770    </method>
3771    <doc>
3772    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3773
3774 @author crazybob@google.com (Bob Lee)]]>
3775    </doc>
3776  </interface>
3777  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3778</package>
3779<package name="com.google.inject.daggeradapter">
3780  <!-- start class com.google.inject.daggeradapter.DaggerAdapter -->
3781  <class name="DaggerAdapter" extends="java.lang.Object"
3782    abstract="false"
3783    static="false" final="true" visibility="public"
3784    deprecated="not deprecated">
3785    <method name="from" return="com.google.inject.Module"
3786      abstract="false" native="false" synchronized="false"
3787      static="true" final="false" visibility="public"
3788      deprecated="not deprecated">
3789      <param name="daggerModuleObjects" type="java.lang.Object[]"/>
3790      <doc>
3791      <![CDATA[Returns a guice module from a dagger module.
3792
3793 <p>Note: At present, it does not honor {@code @Module(includes=...)} directives.]]>
3794      </doc>
3795    </method>
3796    <doc>
3797    <![CDATA[A utility to adapt classes annotated with {@link @dagger.Module} such that their
3798 {@link @dagger.Provides} methods can be properly invoked by Guice to perform their
3799 provision operations.
3800
3801 <p>Simple example: <pre>{@code
3802   Guice.createInjector(...other modules..., DaggerAdapter.from(new SomeDaggerAdapter()));
3803 }</pre>
3804
3805 <p>Some notes on usage and compatibility.
3806   <ul>
3807     <li>Dagger provider methods have a "SET_VALUES" provision mode not supported by Guice.
3808     <li>MapBindings are not yet implemented (pending).
3809     <li>Be careful about stateful modules. In contrast to Dagger (where components are
3810         expected to be recreated on-demand with new Module instances), Guice typically
3811         has a single injector with a long lifetime, so your module instance will be used
3812         throughout the lifetime of the entire app.
3813     <li>Dagger 1.x uses {@link @Singleton} for all scopes, including shorter-lived scopes
3814         like per-request or per-activity.  Using modules written with Dagger 1.x usage
3815         in mind may result in mis-scoped objects.
3816     <li>Dagger 2.x supports custom scope annotations, but for use in Guice, a custom scope
3817         implementation must be registered in order to support the custom lifetime of that
3818         annotation.
3819   </ul>
3820
3821 @author cgruber@google.com (Christian Gruber)]]>
3822    </doc>
3823  </class>
3824  <!-- end class com.google.inject.daggeradapter.DaggerAdapter -->
3825</package>
3826<package name="com.google.inject.grapher">
3827  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher -->
3828  <class name="AbstractInjectorGrapher" extends="java.lang.Object"
3829    abstract="true"
3830    static="false" final="false" visibility="public"
3831    deprecated="not deprecated">
3832    <implements name="com.google.inject.grapher.InjectorGrapher"/>
3833    <constructor name="AbstractInjectorGrapher"
3834      static="false" final="false" visibility="public"
3835      deprecated="not deprecated">
3836    </constructor>
3837    <constructor name="AbstractInjectorGrapher" type="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3838      static="false" final="false" visibility="public"
3839      deprecated="not deprecated">
3840    </constructor>
3841    <method name="graph"
3842      abstract="false" native="false" synchronized="false"
3843      static="false" final="true" visibility="public"
3844      deprecated="not deprecated">
3845      <param name="injector" type="com.google.inject.Injector"/>
3846      <exception name="IOException" type="java.io.IOException"/>
3847    </method>
3848    <method name="graph"
3849      abstract="false" native="false" synchronized="false"
3850      static="false" final="true" visibility="public"
3851      deprecated="not deprecated">
3852      <param name="injector" type="com.google.inject.Injector"/>
3853      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
3854      <exception name="IOException" type="java.io.IOException"/>
3855    </method>
3856    <method name="reset"
3857      abstract="true" native="false" synchronized="false"
3858      static="false" final="false" visibility="protected"
3859      deprecated="not deprecated">
3860      <exception name="IOException" type="java.io.IOException"/>
3861      <doc>
3862      <![CDATA[Resets the state of the grapher before rendering a new graph.]]>
3863      </doc>
3864    </method>
3865    <method name="newInterfaceNode"
3866      abstract="true" native="false" synchronized="false"
3867      static="false" final="false" visibility="protected"
3868      deprecated="not deprecated">
3869      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
3870      <exception name="IOException" type="java.io.IOException"/>
3871      <doc>
3872      <![CDATA[Adds a new interface node to the graph.]]>
3873      </doc>
3874    </method>
3875    <method name="newImplementationNode"
3876      abstract="true" native="false" synchronized="false"
3877      static="false" final="false" visibility="protected"
3878      deprecated="not deprecated">
3879      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
3880      <exception name="IOException" type="java.io.IOException"/>
3881      <doc>
3882      <![CDATA[Adds a new implementation node to the graph.]]>
3883      </doc>
3884    </method>
3885    <method name="newInstanceNode"
3886      abstract="true" native="false" synchronized="false"
3887      static="false" final="false" visibility="protected"
3888      deprecated="not deprecated">
3889      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
3890      <exception name="IOException" type="java.io.IOException"/>
3891      <doc>
3892      <![CDATA[Adds a new instance node to the graph.]]>
3893      </doc>
3894    </method>
3895    <method name="newDependencyEdge"
3896      abstract="true" native="false" synchronized="false"
3897      static="false" final="false" visibility="protected"
3898      deprecated="not deprecated">
3899      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
3900      <exception name="IOException" type="java.io.IOException"/>
3901      <doc>
3902      <![CDATA[Adds a new dependency edge to the graph.]]>
3903      </doc>
3904    </method>
3905    <method name="newBindingEdge"
3906      abstract="true" native="false" synchronized="false"
3907      static="false" final="false" visibility="protected"
3908      deprecated="not deprecated">
3909      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
3910      <exception name="IOException" type="java.io.IOException"/>
3911      <doc>
3912      <![CDATA[Adds a new binding edge to the graph.]]>
3913      </doc>
3914    </method>
3915    <method name="postProcess"
3916      abstract="true" native="false" synchronized="false"
3917      static="false" final="false" visibility="protected"
3918      deprecated="not deprecated">
3919      <exception name="IOException" type="java.io.IOException"/>
3920      <doc>
3921      <![CDATA[Performs any post processing required after all nodes and edges have been added.]]>
3922      </doc>
3923    </method>
3924    <doc>
3925    <![CDATA[Abstract injector grapher that builds the dependency graph but doesn't render it.
3926
3927 @author bojand@google.com (Bojan Djordjevic)
3928 @since 4.0]]>
3929    </doc>
3930  </class>
3931  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher -->
3932  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3933  <class name="AbstractInjectorGrapher.GrapherParameters" extends="java.lang.Object"
3934    abstract="false"
3935    static="true" final="true" visibility="public"
3936    deprecated="not deprecated">
3937    <constructor name="GrapherParameters"
3938      static="false" final="false" visibility="public"
3939      deprecated="not deprecated">
3940    </constructor>
3941    <method name="getRootKeySetCreator" return="com.google.inject.grapher.RootKeySetCreator"
3942      abstract="false" native="false" synchronized="false"
3943      static="false" final="false" visibility="public"
3944      deprecated="not deprecated">
3945    </method>
3946    <method name="setRootKeySetCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3947      abstract="false" native="false" synchronized="false"
3948      static="false" final="false" visibility="public"
3949      deprecated="not deprecated">
3950      <param name="rootKeySetCreator" type="com.google.inject.grapher.RootKeySetCreator"/>
3951    </method>
3952    <method name="getAliasCreator" return="com.google.inject.grapher.AliasCreator"
3953      abstract="false" native="false" synchronized="false"
3954      static="false" final="false" visibility="public"
3955      deprecated="not deprecated">
3956    </method>
3957    <method name="setAliasCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3958      abstract="false" native="false" synchronized="false"
3959      static="false" final="false" visibility="public"
3960      deprecated="not deprecated">
3961      <param name="aliasCreator" type="com.google.inject.grapher.AliasCreator"/>
3962    </method>
3963    <method name="getNodeCreator" return="com.google.inject.grapher.NodeCreator"
3964      abstract="false" native="false" synchronized="false"
3965      static="false" final="false" visibility="public"
3966      deprecated="not deprecated">
3967    </method>
3968    <method name="setNodeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3969      abstract="false" native="false" synchronized="false"
3970      static="false" final="false" visibility="public"
3971      deprecated="not deprecated">
3972      <param name="nodeCreator" type="com.google.inject.grapher.NodeCreator"/>
3973    </method>
3974    <method name="getEdgeCreator" return="com.google.inject.grapher.EdgeCreator"
3975      abstract="false" native="false" synchronized="false"
3976      static="false" final="false" visibility="public"
3977      deprecated="not deprecated">
3978    </method>
3979    <method name="setEdgeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3980      abstract="false" native="false" synchronized="false"
3981      static="false" final="false" visibility="public"
3982      deprecated="not deprecated">
3983      <param name="edgeCreator" type="com.google.inject.grapher.EdgeCreator"/>
3984    </method>
3985    <doc>
3986    <![CDATA[Parameters used to override default settings of the grapher.
3987 @since 4.0]]>
3988    </doc>
3989  </class>
3990  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3991  <!-- start class com.google.inject.grapher.Alias -->
3992  <class name="Alias" extends="java.lang.Object"
3993    abstract="false"
3994    static="false" final="true" visibility="public"
3995    deprecated="not deprecated">
3996    <constructor name="Alias" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
3997      static="false" final="false" visibility="public"
3998      deprecated="not deprecated">
3999    </constructor>
4000    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4001      abstract="false" native="false" synchronized="false"
4002      static="false" final="false" visibility="public"
4003      deprecated="not deprecated">
4004    </method>
4005    <method name="getToId" return="com.google.inject.grapher.NodeId"
4006      abstract="false" native="false" synchronized="false"
4007      static="false" final="false" visibility="public"
4008      deprecated="not deprecated">
4009    </method>
4010    <doc>
4011    <![CDATA[Alias between two nodes. Causes the 'from' node to be aliased with the 'to' node, which means
4012 that the 'from' node is not rendered and all edges going to it instead go to the 'to' node.
4013
4014 @author bojand@google.com (Bojan Djordjevic)
4015 @since 4.0]]>
4016    </doc>
4017  </class>
4018  <!-- end class com.google.inject.grapher.Alias -->
4019  <!-- start interface com.google.inject.grapher.AliasCreator -->
4020  <interface name="AliasCreator"    abstract="true"
4021    static="false" final="false" visibility="public"
4022    deprecated="not deprecated">
4023    <method name="createAliases" return="java.lang.Iterable&lt;com.google.inject.grapher.Alias&gt;"
4024      abstract="true" native="false" synchronized="false"
4025      static="false" final="false" visibility="public"
4026      deprecated="not deprecated">
4027      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4028      <doc>
4029      <![CDATA[Returns aliases for the given dependency graph. The aliases do not need to be transitively
4030 resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
4031 responsibility of the caller to resolve this to (X to Z) and (Y to Z).
4032
4033 @param bindings bindings that make up the dependency graph
4034 @return aliases that should be applied on the graph]]>
4035      </doc>
4036    </method>
4037    <doc>
4038    <![CDATA[Creator of node aliases. Used by dependency graphers to merge nodes in the internal Guice graph
4039 into a single node on the rendered graph.
4040
4041 @author bojand@google.com (Bojan Djordjevic)
4042 @since 4.0]]>
4043    </doc>
4044  </interface>
4045  <!-- end interface com.google.inject.grapher.AliasCreator -->
4046  <!-- start class com.google.inject.grapher.BindingEdge -->
4047  <class name="BindingEdge" extends="com.google.inject.grapher.Edge"
4048    abstract="false"
4049    static="false" final="false" visibility="public"
4050    deprecated="not deprecated">
4051    <constructor name="BindingEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.grapher.BindingEdge.Type"
4052      static="false" final="false" visibility="public"
4053      deprecated="not deprecated">
4054    </constructor>
4055    <method name="getType" return="com.google.inject.grapher.BindingEdge.Type"
4056      abstract="false" native="false" synchronized="false"
4057      static="false" final="false" visibility="public"
4058      deprecated="not deprecated">
4059    </method>
4060    <method name="equals" return="boolean"
4061      abstract="false" native="false" synchronized="false"
4062      static="false" final="false" visibility="public"
4063      deprecated="not deprecated">
4064      <param name="obj" type="java.lang.Object"/>
4065    </method>
4066    <method name="hashCode" return="int"
4067      abstract="false" native="false" synchronized="false"
4068      static="false" final="false" visibility="public"
4069      deprecated="not deprecated">
4070    </method>
4071    <method name="toString" return="java.lang.String"
4072      abstract="false" native="false" synchronized="false"
4073      static="false" final="false" visibility="public"
4074      deprecated="not deprecated">
4075    </method>
4076    <method name="copy" return="com.google.inject.grapher.Edge"
4077      abstract="false" native="false" synchronized="false"
4078      static="false" final="false" visibility="public"
4079      deprecated="not deprecated">
4080      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4081      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4082    </method>
4083    <doc>
4084    <![CDATA[Edge that connects an interface to the type or instance that is bound to implement it.
4085
4086 @author phopkins@gmail.com (Pete Hopkins)
4087 @since 4.0 (since 2.0 as an interface)]]>
4088    </doc>
4089  </class>
4090  <!-- end class com.google.inject.grapher.BindingEdge -->
4091  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
4092  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
4093    abstract="false"
4094    static="true" final="true" visibility="public"
4095    deprecated="not deprecated">
4096    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
4097      abstract="false" native="false" synchronized="false"
4098      static="true" final="false" visibility="public"
4099      deprecated="not deprecated">
4100    </method>
4101    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
4102      abstract="false" native="false" synchronized="false"
4103      static="true" final="false" visibility="public"
4104      deprecated="not deprecated">
4105      <param name="name" type="java.lang.String"/>
4106    </method>
4107    <doc>
4108    <![CDATA[Classification for what kind of binding this edge represents.]]>
4109    </doc>
4110  </class>
4111  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
4112  <!-- start class com.google.inject.grapher.DefaultRootKeySetCreator -->
4113  <class name="DefaultRootKeySetCreator" extends="java.lang.Object"
4114    abstract="false"
4115    static="false" final="false" visibility="public"
4116    deprecated="not deprecated">
4117    <implements name="com.google.inject.grapher.RootKeySetCreator"/>
4118    <constructor name="DefaultRootKeySetCreator"
4119      static="false" final="false" visibility="public"
4120      deprecated="not deprecated">
4121    </constructor>
4122    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4123      abstract="false" native="false" synchronized="false"
4124      static="false" final="false" visibility="public"
4125      deprecated="not deprecated">
4126      <param name="injector" type="com.google.inject.Injector"/>
4127    </method>
4128    <doc>
4129    <![CDATA[Root key set creator that starts with all types that are not Guice internal types or the
4130 {@link Logger} type.
4131
4132 @author bojand@google.com (Bojan Djordjevic)
4133 @since 4.0]]>
4134    </doc>
4135  </class>
4136  <!-- end class com.google.inject.grapher.DefaultRootKeySetCreator -->
4137  <!-- start class com.google.inject.grapher.DependencyEdge -->
4138  <class name="DependencyEdge" extends="com.google.inject.grapher.Edge"
4139    abstract="false"
4140    static="false" final="false" visibility="public"
4141    deprecated="not deprecated">
4142    <constructor name="DependencyEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.spi.InjectionPoint"
4143      static="false" final="false" visibility="public"
4144      deprecated="not deprecated">
4145    </constructor>
4146    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
4147      abstract="false" native="false" synchronized="false"
4148      static="false" final="false" visibility="public"
4149      deprecated="not deprecated">
4150    </method>
4151    <method name="equals" return="boolean"
4152      abstract="false" native="false" synchronized="false"
4153      static="false" final="false" visibility="public"
4154      deprecated="not deprecated">
4155      <param name="obj" type="java.lang.Object"/>
4156    </method>
4157    <method name="hashCode" return="int"
4158      abstract="false" native="false" synchronized="false"
4159      static="false" final="false" visibility="public"
4160      deprecated="not deprecated">
4161    </method>
4162    <method name="toString" return="java.lang.String"
4163      abstract="false" native="false" synchronized="false"
4164      static="false" final="false" visibility="public"
4165      deprecated="not deprecated">
4166    </method>
4167    <method name="copy" return="com.google.inject.grapher.Edge"
4168      abstract="false" native="false" synchronized="false"
4169      static="false" final="false" visibility="public"
4170      deprecated="not deprecated">
4171      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4172      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4173    </method>
4174    <doc>
4175    <![CDATA[Edge from a class or {@link InjectionPoint} to the interface node that will satisfy the
4176 dependency.
4177
4178 @author phopkins@gmail.com (Pete Hopkins)
4179 @since 4.0 (since 2.0 as an interface)]]>
4180    </doc>
4181  </class>
4182  <!-- end class com.google.inject.grapher.DependencyEdge -->
4183  <!-- start class com.google.inject.grapher.Edge -->
4184  <class name="Edge" extends="java.lang.Object"
4185    abstract="true"
4186    static="false" final="false" visibility="public"
4187    deprecated="not deprecated">
4188    <constructor name="Edge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4189      static="false" final="false" visibility="protected"
4190      deprecated="not deprecated">
4191    </constructor>
4192    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4193      abstract="false" native="false" synchronized="false"
4194      static="false" final="false" visibility="public"
4195      deprecated="not deprecated">
4196    </method>
4197    <method name="getToId" return="com.google.inject.grapher.NodeId"
4198      abstract="false" native="false" synchronized="false"
4199      static="false" final="false" visibility="public"
4200      deprecated="not deprecated">
4201    </method>
4202    <method name="equals" return="boolean"
4203      abstract="false" native="false" synchronized="false"
4204      static="false" final="false" visibility="public"
4205      deprecated="not deprecated">
4206      <param name="obj" type="java.lang.Object"/>
4207    </method>
4208    <method name="hashCode" return="int"
4209      abstract="false" native="false" synchronized="false"
4210      static="false" final="false" visibility="public"
4211      deprecated="not deprecated">
4212    </method>
4213    <method name="copy" return="com.google.inject.grapher.Edge"
4214      abstract="true" native="false" synchronized="false"
4215      static="false" final="false" visibility="public"
4216      deprecated="not deprecated">
4217      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4218      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4219      <doc>
4220      <![CDATA[Returns a copy of the edge with new node IDs.
4221
4222 @param fromId new ID of the 'from' node
4223 @param toId new ID of the 'to' node
4224 @return copy of the edge with the new node IDs]]>
4225      </doc>
4226    </method>
4227    <doc>
4228    <![CDATA[Edge in a guice dependency graph.
4229
4230 @author bojand@google.com (Bojan Djordjevic)
4231 @since 4.0]]>
4232    </doc>
4233  </class>
4234  <!-- end class com.google.inject.grapher.Edge -->
4235  <!-- start interface com.google.inject.grapher.EdgeCreator -->
4236  <interface name="EdgeCreator"    abstract="true"
4237    static="false" final="false" visibility="public"
4238    deprecated="not deprecated">
4239    <method name="getEdges" return="java.lang.Iterable&lt;com.google.inject.grapher.Edge&gt;"
4240      abstract="true" native="false" synchronized="false"
4241      static="false" final="false" visibility="public"
4242      deprecated="not deprecated">
4243      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4244      <doc>
4245      <![CDATA[Returns edges for the given dependency graph.]]>
4246      </doc>
4247    </method>
4248    <doc>
4249    <![CDATA[Creator of graph edges to render. All edges will be rendered on the graph after node aliasing is
4250 performed.
4251
4252 @author bojand@google.com (Bojan Djordjevic)
4253 @since 4.0]]>
4254    </doc>
4255  </interface>
4256  <!-- end interface com.google.inject.grapher.EdgeCreator -->
4257  <!-- start class com.google.inject.grapher.ImplementationNode -->
4258  <class name="ImplementationNode" extends="com.google.inject.grapher.Node"
4259    abstract="false"
4260    static="false" final="false" visibility="public"
4261    deprecated="not deprecated">
4262    <constructor name="ImplementationNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.util.Collection&lt;java.lang.reflect.Member&gt;"
4263      static="false" final="false" visibility="public"
4264      deprecated="not deprecated">
4265    </constructor>
4266    <method name="getMembers" return="java.util.Collection&lt;java.lang.reflect.Member&gt;"
4267      abstract="false" native="false" synchronized="false"
4268      static="false" final="false" visibility="public"
4269      deprecated="not deprecated">
4270    </method>
4271    <method name="equals" return="boolean"
4272      abstract="false" native="false" synchronized="false"
4273      static="false" final="false" visibility="public"
4274      deprecated="not deprecated">
4275      <param name="obj" type="java.lang.Object"/>
4276    </method>
4277    <method name="hashCode" return="int"
4278      abstract="false" native="false" synchronized="false"
4279      static="false" final="false" visibility="public"
4280      deprecated="not deprecated">
4281    </method>
4282    <method name="toString" return="java.lang.String"
4283      abstract="false" native="false" synchronized="false"
4284      static="false" final="false" visibility="public"
4285      deprecated="not deprecated">
4286    </method>
4287    <method name="copy" return="com.google.inject.grapher.Node"
4288      abstract="false" native="false" synchronized="false"
4289      static="false" final="false" visibility="public"
4290      deprecated="not deprecated">
4291      <param name="id" type="com.google.inject.grapher.NodeId"/>
4292    </method>
4293    <doc>
4294    <![CDATA[Node for types that have {@link com.google.inject.spi.Dependency}s and are
4295 bound to {@link InterfaceNode}s. These nodes will often have fields for
4296 {@link Member}s that are {@link com.google.inject.spi.InjectionPoint}s.
4297
4298 @see DependencyEdge
4299 @author phopkins@gmail.com (Pete Hopkins)
4300 @since 4.0 (since 2.0 as an interface)]]>
4301    </doc>
4302  </class>
4303  <!-- end class com.google.inject.grapher.ImplementationNode -->
4304  <!-- start interface com.google.inject.grapher.InjectorGrapher -->
4305  <interface name="InjectorGrapher"    abstract="true"
4306    static="false" final="false" visibility="public"
4307    deprecated="not deprecated">
4308    <method name="graph"
4309      abstract="true" native="false" synchronized="false"
4310      static="false" final="false" visibility="public"
4311      deprecated="not deprecated">
4312      <param name="injector" type="com.google.inject.Injector"/>
4313      <exception name="IOException" type="java.io.IOException"/>
4314      <doc>
4315      <![CDATA[Graphs the guice dependency graph for the given injector using default starting keys.]]>
4316      </doc>
4317    </method>
4318    <method name="graph"
4319      abstract="true" native="false" synchronized="false"
4320      static="false" final="false" visibility="public"
4321      deprecated="not deprecated">
4322      <param name="injector" type="com.google.inject.Injector"/>
4323      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
4324      <exception name="IOException" type="java.io.IOException"/>
4325      <doc>
4326      <![CDATA[Graphs the guice dependency graph for the given injector using the given starting keys and
4327 their transitive dependencies.]]>
4328      </doc>
4329    </method>
4330    <doc>
4331    <![CDATA[Guice injector grapher. Renders the guice dependency graph for an injector. It can render the
4332 whole dependency graph or just transitive dependencies of a given set of nodes.
4333
4334 @author phopkins@gmail.com (Pete Hopkins)
4335 @since 4.0 (since 2.0 as a concrete class with a different API)]]>
4336    </doc>
4337  </interface>
4338  <!-- end interface com.google.inject.grapher.InjectorGrapher -->
4339  <!-- start class com.google.inject.grapher.InstanceNode -->
4340  <class name="InstanceNode" extends="com.google.inject.grapher.Node"
4341    abstract="false"
4342    static="false" final="false" visibility="public"
4343    deprecated="not deprecated">
4344    <constructor name="InstanceNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.lang.Object, java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4345      static="false" final="false" visibility="public"
4346      deprecated="not deprecated">
4347    </constructor>
4348    <method name="getInstance" return="java.lang.Object"
4349      abstract="false" native="false" synchronized="false"
4350      static="false" final="false" visibility="public"
4351      deprecated="not deprecated">
4352    </method>
4353    <method name="getMembers" return="java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4354      abstract="false" native="false" synchronized="false"
4355      static="false" final="false" visibility="public"
4356      deprecated="not deprecated">
4357    </method>
4358    <method name="equals" return="boolean"
4359      abstract="false" native="false" synchronized="false"
4360      static="false" final="false" visibility="public"
4361      deprecated="not deprecated">
4362      <param name="obj" type="java.lang.Object"/>
4363    </method>
4364    <method name="hashCode" return="int"
4365      abstract="false" native="false" synchronized="false"
4366      static="false" final="false" visibility="public"
4367      deprecated="not deprecated">
4368    </method>
4369    <method name="toString" return="java.lang.String"
4370      abstract="false" native="false" synchronized="false"
4371      static="false" final="false" visibility="public"
4372      deprecated="not deprecated">
4373    </method>
4374    <method name="copy" return="com.google.inject.grapher.Node"
4375      abstract="false" native="false" synchronized="false"
4376      static="false" final="false" visibility="public"
4377      deprecated="not deprecated">
4378      <param name="id" type="com.google.inject.grapher.NodeId"/>
4379    </method>
4380    <doc>
4381    <![CDATA[Node for instances. Used when a type is bound to an instance.
4382
4383 @author bojand@google.com (Bojan Djordjevic)
4384 @since 4.0]]>
4385    </doc>
4386  </class>
4387  <!-- end class com.google.inject.grapher.InstanceNode -->
4388  <!-- start class com.google.inject.grapher.InterfaceNode -->
4389  <class name="InterfaceNode" extends="com.google.inject.grapher.Node"
4390    abstract="false"
4391    static="false" final="false" visibility="public"
4392    deprecated="not deprecated">
4393    <constructor name="InterfaceNode" type="com.google.inject.grapher.NodeId, java.lang.Object"
4394      static="false" final="false" visibility="public"
4395      deprecated="not deprecated">
4396    </constructor>
4397    <method name="copy" return="com.google.inject.grapher.Node"
4398      abstract="false" native="false" synchronized="false"
4399      static="false" final="false" visibility="public"
4400      deprecated="not deprecated">
4401      <param name="id" type="com.google.inject.grapher.NodeId"/>
4402    </method>
4403    <method name="equals" return="boolean"
4404      abstract="false" native="false" synchronized="false"
4405      static="false" final="false" visibility="public"
4406      deprecated="not deprecated">
4407      <param name="obj" type="java.lang.Object"/>
4408    </method>
4409    <method name="toString" return="java.lang.String"
4410      abstract="false" native="false" synchronized="false"
4411      static="false" final="false" visibility="public"
4412      deprecated="not deprecated">
4413    </method>
4414    <doc>
4415    <![CDATA[Node for an interface type that has been bound to an implementation class or instance.
4416
4417 @see BindingEdge
4418 @author phopkins@gmail.com (Pete Hopkins)
4419 @since 4.0 (since 2.0 as an interface)]]>
4420    </doc>
4421  </class>
4422  <!-- end class com.google.inject.grapher.InterfaceNode -->
4423  <!-- start interface com.google.inject.grapher.NameFactory -->
4424  <interface name="NameFactory"    abstract="true"
4425    static="false" final="false" visibility="public"
4426    deprecated="not deprecated">
4427    <method name="getMemberName" return="java.lang.String"
4428      abstract="true" native="false" synchronized="false"
4429      static="false" final="false" visibility="public"
4430      deprecated="not deprecated">
4431      <param name="member" type="java.lang.reflect.Member"/>
4432    </method>
4433    <method name="getClassName" return="java.lang.String"
4434      abstract="true" 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="getInstanceName" return="java.lang.String"
4440      abstract="true" native="false" synchronized="false"
4441      static="false" final="false" visibility="public"
4442      deprecated="not deprecated">
4443      <param name="instance" type="java.lang.Object"/>
4444    </method>
4445    <method name="getAnnotationName" return="java.lang.String"
4446      abstract="true" native="false" synchronized="false"
4447      static="false" final="false" visibility="public"
4448      deprecated="not deprecated">
4449      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4450    </method>
4451    <method name="getSourceName" return="java.lang.String"
4452      abstract="true" native="false" synchronized="false"
4453      static="false" final="false" visibility="public"
4454      deprecated="not deprecated">
4455      <param name="source" type="java.lang.Object"/>
4456    </method>
4457    <doc>
4458    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4459 display in the graph for the types that come up in
4460 {@link com.google.inject.Binding}s.
4461
4462 @author phopkins@gmail.com (Pete Hopkins)]]>
4463    </doc>
4464  </interface>
4465  <!-- end interface com.google.inject.grapher.NameFactory -->
4466  <!-- start class com.google.inject.grapher.Node -->
4467  <class name="Node" extends="java.lang.Object"
4468    abstract="true"
4469    static="false" final="false" visibility="public"
4470    deprecated="not deprecated">
4471    <constructor name="Node" type="com.google.inject.grapher.NodeId, java.lang.Object"
4472      static="false" final="false" visibility="protected"
4473      deprecated="not deprecated">
4474    </constructor>
4475    <method name="getId" return="com.google.inject.grapher.NodeId"
4476      abstract="false" native="false" synchronized="false"
4477      static="false" final="false" visibility="public"
4478      deprecated="not deprecated">
4479    </method>
4480    <method name="getSource" return="java.lang.Object"
4481      abstract="false" native="false" synchronized="false"
4482      static="false" final="false" visibility="public"
4483      deprecated="not deprecated">
4484    </method>
4485    <method name="equals" return="boolean"
4486      abstract="false" native="false" synchronized="false"
4487      static="false" final="false" visibility="public"
4488      deprecated="not deprecated">
4489      <param name="obj" type="java.lang.Object"/>
4490    </method>
4491    <method name="hashCode" return="int"
4492      abstract="false" native="false" synchronized="false"
4493      static="false" final="false" visibility="public"
4494      deprecated="not deprecated">
4495    </method>
4496    <method name="copy" return="com.google.inject.grapher.Node"
4497      abstract="true" native="false" synchronized="false"
4498      static="false" final="false" visibility="public"
4499      deprecated="not deprecated">
4500      <param name="id" type="com.google.inject.grapher.NodeId"/>
4501      <doc>
4502      <![CDATA[Returns a copy of the node with a new ID.
4503
4504 @param id new ID of the node
4505 @return copy of the node with a new ID]]>
4506      </doc>
4507    </method>
4508    <doc>
4509    <![CDATA[Node in a guice dependency graph.
4510
4511 @author bojand@google.com (Bojan Djordjevic)
4512 @since 4.0]]>
4513    </doc>
4514  </class>
4515  <!-- end class com.google.inject.grapher.Node -->
4516  <!-- start interface com.google.inject.grapher.NodeCreator -->
4517  <interface name="NodeCreator"    abstract="true"
4518    static="false" final="false" visibility="public"
4519    deprecated="not deprecated">
4520    <method name="getNodes" return="java.lang.Iterable&lt;com.google.inject.grapher.Node&gt;"
4521      abstract="true" native="false" synchronized="false"
4522      static="false" final="false" visibility="public"
4523      deprecated="not deprecated">
4524      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4525      <doc>
4526      <![CDATA[Returns nodes for the given dependency graph.]]>
4527      </doc>
4528    </method>
4529    <doc>
4530    <![CDATA[Creator of graph nodes.
4531
4532 @author bojand@google.com (Bojan Djordjevic)
4533 @since 4.0]]>
4534    </doc>
4535  </interface>
4536  <!-- end interface com.google.inject.grapher.NodeCreator -->
4537  <!-- start class com.google.inject.grapher.NodeId -->
4538  <class name="NodeId" extends="java.lang.Object"
4539    abstract="false"
4540    static="false" final="true" visibility="public"
4541    deprecated="not deprecated">
4542    <method name="newTypeId" return="com.google.inject.grapher.NodeId"
4543      abstract="false" native="false" synchronized="false"
4544      static="true" final="false" visibility="public"
4545      deprecated="not deprecated">
4546      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4547    </method>
4548    <method name="newInstanceId" return="com.google.inject.grapher.NodeId"
4549      abstract="false" native="false" synchronized="false"
4550      static="true" final="false" visibility="public"
4551      deprecated="not deprecated">
4552      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4553    </method>
4554    <method name="getKey" return="com.google.inject.Key&lt;?&gt;"
4555      abstract="false" native="false" synchronized="false"
4556      static="false" final="false" visibility="public"
4557      deprecated="not deprecated">
4558    </method>
4559    <method name="hashCode" return="int"
4560      abstract="false" native="false" synchronized="false"
4561      static="false" final="false" visibility="public"
4562      deprecated="not deprecated">
4563    </method>
4564    <method name="equals" return="boolean"
4565      abstract="false" native="false" synchronized="false"
4566      static="false" final="false" visibility="public"
4567      deprecated="not deprecated">
4568      <param name="obj" type="java.lang.Object"/>
4569    </method>
4570    <method name="toString" return="java.lang.String"
4571      abstract="false" native="false" synchronized="false"
4572      static="false" final="false" visibility="public"
4573      deprecated="not deprecated">
4574    </method>
4575    <doc>
4576    <![CDATA[ID of a node in the graph. An ID is given by a {@link Key} and a node type, which is used to
4577 distinguish instances and implementation classes for the same key. For example
4578 {@code bind(Integer.class).toInstance(42)} produces two nodes: an
4579 interface node with the key of {@code Key<Integer>} and an instance node with the same
4580 {@link Key} and value of 42.
4581
4582 @author bojand@google.com (Bojan Djordjevic)
4583 @since 4.0]]>
4584    </doc>
4585  </class>
4586  <!-- end class com.google.inject.grapher.NodeId -->
4587  <!-- start class com.google.inject.grapher.NodeId.NodeType -->
4588  <class name="NodeId.NodeType" extends="java.lang.Enum&lt;com.google.inject.grapher.NodeId.NodeType&gt;"
4589    abstract="false"
4590    static="true" final="true" visibility="public"
4591    deprecated="not deprecated">
4592    <method name="values" return="com.google.inject.grapher.NodeId.NodeType[]"
4593      abstract="false" native="false" synchronized="false"
4594      static="true" final="false" visibility="public"
4595      deprecated="not deprecated">
4596    </method>
4597    <method name="valueOf" return="com.google.inject.grapher.NodeId.NodeType"
4598      abstract="false" native="false" synchronized="false"
4599      static="true" final="false" visibility="public"
4600      deprecated="not deprecated">
4601      <param name="name" type="java.lang.String"/>
4602    </method>
4603    <doc>
4604    <![CDATA[Type of node.
4605
4606 @since 4.0]]>
4607    </doc>
4608  </class>
4609  <!-- end class com.google.inject.grapher.NodeId.NodeType -->
4610  <!-- start interface com.google.inject.grapher.RootKeySetCreator -->
4611  <interface name="RootKeySetCreator"    abstract="true"
4612    static="false" final="false" visibility="public"
4613    deprecated="not deprecated">
4614    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4615      abstract="true" native="false" synchronized="false"
4616      static="false" final="false" visibility="public"
4617      deprecated="not deprecated">
4618      <param name="injector" type="com.google.inject.Injector"/>
4619      <doc>
4620      <![CDATA[Returns the set of starting keys to graph.]]>
4621      </doc>
4622    </method>
4623    <doc>
4624    <![CDATA[Creator of the default starting set of keys to graph. These keys and their transitive
4625 dependencies will be graphed.
4626
4627 @author bojand@google.com (Bojan Djordjevic)
4628 @since 4.0]]>
4629    </doc>
4630  </interface>
4631  <!-- end interface com.google.inject.grapher.RootKeySetCreator -->
4632  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4633  <class name="ShortNameFactory" extends="java.lang.Object"
4634    abstract="false"
4635    static="false" final="false" visibility="public"
4636    deprecated="not deprecated">
4637    <implements name="com.google.inject.grapher.NameFactory"/>
4638    <constructor name="ShortNameFactory"
4639      static="false" final="false" visibility="public"
4640      deprecated="not deprecated">
4641    </constructor>
4642    <method name="getMemberName" return="java.lang.String"
4643      abstract="false" native="false" synchronized="false"
4644      static="false" final="false" visibility="public"
4645      deprecated="not deprecated">
4646      <param name="member" type="java.lang.reflect.Member"/>
4647    </method>
4648    <method name="getAnnotationName" return="java.lang.String"
4649      abstract="false" native="false" synchronized="false"
4650      static="false" final="false" visibility="public"
4651      deprecated="not deprecated">
4652      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4653    </method>
4654    <method name="getClassName" return="java.lang.String"
4655      abstract="false" native="false" synchronized="false"
4656      static="false" final="false" visibility="public"
4657      deprecated="not deprecated">
4658      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4659    </method>
4660    <method name="getInstanceName" return="java.lang.String"
4661      abstract="false" native="false" synchronized="false"
4662      static="false" final="false" visibility="public"
4663      deprecated="not deprecated">
4664      <param name="instance" type="java.lang.Object"/>
4665    </method>
4666    <method name="getSourceName" return="java.lang.String"
4667      abstract="false" native="false" synchronized="false"
4668      static="false" final="false" visibility="public"
4669      deprecated="not deprecated">
4670      <param name="source" type="java.lang.Object"/>
4671      <doc>
4672      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4673 a {@link StackTraceElement} for when the binding is made to the instance,
4674 or a {@link Method} when a provider method is used.]]>
4675      </doc>
4676    </method>
4677    <method name="getFileString" return="java.lang.String"
4678      abstract="false" native="false" synchronized="false"
4679      static="false" final="false" visibility="protected"
4680      deprecated="not deprecated">
4681      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4682    </method>
4683    <method name="getMethodString" return="java.lang.String"
4684      abstract="false" native="false" synchronized="false"
4685      static="false" final="false" visibility="protected"
4686      deprecated="not deprecated">
4687      <param name="method" type="java.lang.reflect.Method"/>
4688    </method>
4689    <doc>
4690    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4691 {@link Object#toString()}s and strips package names out of them so that
4692 they'll fit on the graph.
4693
4694 @author phopkins@gmail.com (Pete Hopkins)]]>
4695    </doc>
4696  </class>
4697  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4698  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4699  <class name="TransitiveDependencyVisitor" extends="com.google.inject.spi.DefaultBindingTargetVisitor&lt;java.lang.Object, java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;&gt;"
4700    abstract="false"
4701    static="false" final="false" visibility="public"
4702    deprecated="not deprecated">
4703    <constructor name="TransitiveDependencyVisitor"
4704      static="false" final="false" visibility="public"
4705      deprecated="not deprecated">
4706    </constructor>
4707    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4708      abstract="false" native="false" synchronized="false"
4709      static="false" final="false" visibility="public"
4710      deprecated="not deprecated">
4711      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4712    </method>
4713    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4714      abstract="false" native="false" synchronized="false"
4715      static="false" final="false" visibility="public"
4716      deprecated="not deprecated">
4717      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4718    </method>
4719    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4720      abstract="false" native="false" synchronized="false"
4721      static="false" final="false" visibility="public"
4722      deprecated="not deprecated">
4723      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4724    </method>
4725    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4726      abstract="false" native="false" synchronized="false"
4727      static="false" final="false" visibility="public"
4728      deprecated="not deprecated">
4729      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4730    </method>
4731    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4732      abstract="false" native="false" synchronized="false"
4733      static="false" final="false" visibility="public"
4734      deprecated="not deprecated">
4735      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4736    </method>
4737    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4738      abstract="false" native="false" synchronized="false"
4739      static="false" final="false" visibility="public"
4740      deprecated="not deprecated">
4741      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4742    </method>
4743    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4744      abstract="false" native="false" synchronized="false"
4745      static="false" final="false" visibility="public"
4746      deprecated="not deprecated">
4747      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4748    </method>
4749    <method name="visitOther" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4750      abstract="false" native="false" synchronized="false"
4751      static="false" final="false" visibility="public"
4752      deprecated="not deprecated">
4753      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
4754      <doc>
4755      <![CDATA[@since 4.0]]>
4756      </doc>
4757    </method>
4758    <doc>
4759    <![CDATA[{@link com.google.inject.spi.BindingTargetVisitor} that returns a
4760 {@link Collection} of the {@link Key}s of each {@link Binding}'s
4761 dependencies. Used by {@link InjectorGrapher} to walk the dependency graph
4762 from a starting set of {@link Binding}s.
4763
4764 @author phopkins@gmail.com (Pete Hopkins)]]>
4765    </doc>
4766  </class>
4767  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4768</package>
4769<package name="com.google.inject.grapher.graphviz">
4770  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4771  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4772    abstract="false"
4773    static="false" final="true" visibility="public"
4774    deprecated="not deprecated">
4775    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4776      abstract="false" native="false" synchronized="false"
4777      static="true" final="false" visibility="public"
4778      deprecated="not deprecated">
4779    </method>
4780    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4781      abstract="false" native="false" synchronized="false"
4782      static="true" final="false" visibility="public"
4783      deprecated="not deprecated">
4784      <param name="name" type="java.lang.String"/>
4785    </method>
4786    <method name="toString" return="java.lang.String"
4787      abstract="false" native="false" synchronized="false"
4788      static="false" final="false" visibility="public"
4789      deprecated="not deprecated">
4790    </method>
4791    <doc>
4792    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4793 concatenation to make double arrows and such.
4794 <p>
4795 See: http://www.graphviz.org/doc/info/arrows.html
4796
4797 @author phopkins@gmail.com (Pete Hopkins)]]>
4798    </doc>
4799  </class>
4800  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4801  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4802  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4803    abstract="false"
4804    static="false" final="true" visibility="public"
4805    deprecated="not deprecated">
4806    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4807      abstract="false" native="false" synchronized="false"
4808      static="true" final="false" visibility="public"
4809      deprecated="not deprecated">
4810    </method>
4811    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4812      abstract="false" native="false" synchronized="false"
4813      static="true" final="false" visibility="public"
4814      deprecated="not deprecated">
4815      <param name="name" type="java.lang.String"/>
4816    </method>
4817    <method name="toString" return="java.lang.String"
4818      abstract="false" native="false" synchronized="false"
4819      static="false" final="false" visibility="public"
4820      deprecated="not deprecated">
4821    </method>
4822    <doc>
4823    <![CDATA[Enum for the "compass point" values used to control where edge
4824 end points appear on the graph.
4825 <p>
4826 See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4827
4828 @author phopkins@gmail.com (Pete Hopkins)]]>
4829    </doc>
4830  </class>
4831  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4832  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4833  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4834    abstract="false"
4835    static="false" final="true" visibility="public"
4836    deprecated="not deprecated">
4837    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4838      abstract="false" native="false" synchronized="false"
4839      static="true" final="false" visibility="public"
4840      deprecated="not deprecated">
4841    </method>
4842    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4843      abstract="false" native="false" synchronized="false"
4844      static="true" final="false" visibility="public"
4845      deprecated="not deprecated">
4846      <param name="name" type="java.lang.String"/>
4847    </method>
4848    <method name="toString" return="java.lang.String"
4849      abstract="false" native="false" synchronized="false"
4850      static="false" final="false" visibility="public"
4851      deprecated="not deprecated">
4852    </method>
4853    <doc>
4854    <![CDATA[Styles for edges.
4855 <p>
4856 See: http://www.graphviz.org/doc/info/attrs.html#k:style
4857
4858 @author phopkins@gmail.com (Pete Hopkins)]]>
4859    </doc>
4860  </class>
4861  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4862  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4863  <class name="GraphvizEdge" extends="java.lang.Object"
4864    abstract="false"
4865    static="false" final="false" visibility="public"
4866    deprecated="not deprecated">
4867    <constructor name="GraphvizEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4868      static="false" final="false" visibility="public"
4869      deprecated="not deprecated">
4870    </constructor>
4871    <method name="getHeadNodeId" return="com.google.inject.grapher.NodeId"
4872      abstract="false" native="false" synchronized="false"
4873      static="false" final="false" visibility="public"
4874      deprecated="not deprecated">
4875      <doc>
4876      <![CDATA[@since 4.0]]>
4877      </doc>
4878    </method>
4879    <method name="getHeadPortId" return="java.lang.String"
4880      abstract="false" native="false" synchronized="false"
4881      static="false" final="false" visibility="public"
4882      deprecated="not deprecated">
4883    </method>
4884    <method name="setHeadPortId"
4885      abstract="false" native="false" synchronized="false"
4886      static="false" final="false" visibility="public"
4887      deprecated="not deprecated">
4888      <param name="headPortId" type="java.lang.String"/>
4889    </method>
4890    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4891      abstract="false" native="false" synchronized="false"
4892      static="false" final="false" visibility="public"
4893      deprecated="not deprecated">
4894    </method>
4895    <method name="setHeadCompassPoint"
4896      abstract="false" native="false" synchronized="false"
4897      static="false" final="false" visibility="public"
4898      deprecated="not deprecated">
4899      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4900    </method>
4901    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4902      abstract="false" native="false" synchronized="false"
4903      static="false" final="false" visibility="public"
4904      deprecated="not deprecated">
4905    </method>
4906    <method name="setArrowHead"
4907      abstract="false" native="false" synchronized="false"
4908      static="false" final="false" visibility="public"
4909      deprecated="not deprecated">
4910      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4911    </method>
4912    <method name="getTailNodeId" return="com.google.inject.grapher.NodeId"
4913      abstract="false" native="false" synchronized="false"
4914      static="false" final="false" visibility="public"
4915      deprecated="not deprecated">
4916      <doc>
4917      <![CDATA[@since 4.0]]>
4918      </doc>
4919    </method>
4920    <method name="getTailPortId" return="java.lang.String"
4921      abstract="false" native="false" synchronized="false"
4922      static="false" final="false" visibility="public"
4923      deprecated="not deprecated">
4924    </method>
4925    <method name="setTailPortId"
4926      abstract="false" native="false" synchronized="false"
4927      static="false" final="false" visibility="public"
4928      deprecated="not deprecated">
4929      <param name="tailPortId" type="java.lang.String"/>
4930    </method>
4931    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4932      abstract="false" native="false" synchronized="false"
4933      static="false" final="false" visibility="public"
4934      deprecated="not deprecated">
4935    </method>
4936    <method name="setTailCompassPoint"
4937      abstract="false" native="false" synchronized="false"
4938      static="false" final="false" visibility="public"
4939      deprecated="not deprecated">
4940      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4941    </method>
4942    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4943      abstract="false" native="false" synchronized="false"
4944      static="false" final="false" visibility="public"
4945      deprecated="not deprecated">
4946    </method>
4947    <method name="setArrowTail"
4948      abstract="false" native="false" synchronized="false"
4949      static="false" final="false" visibility="public"
4950      deprecated="not deprecated">
4951      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4952    </method>
4953    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4954      abstract="false" native="false" synchronized="false"
4955      static="false" final="false" visibility="public"
4956      deprecated="not deprecated">
4957    </method>
4958    <method name="setStyle"
4959      abstract="false" native="false" synchronized="false"
4960      static="false" final="false" visibility="public"
4961      deprecated="not deprecated">
4962      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4963    </method>
4964    <doc>
4965    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4966 interested in drawing.
4967
4968 @author phopkins@gmail.com (Pete Hopkins)]]>
4969    </doc>
4970  </class>
4971  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4972  <!-- start class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4973  <class name="GraphvizGrapher" extends="com.google.inject.grapher.AbstractInjectorGrapher"
4974    abstract="false"
4975    static="false" final="false" visibility="public"
4976    deprecated="not deprecated">
4977    <method name="reset"
4978      abstract="false" native="false" synchronized="false"
4979      static="false" final="false" visibility="protected"
4980      deprecated="not deprecated">
4981    </method>
4982    <method name="setOut"
4983      abstract="false" native="false" synchronized="false"
4984      static="false" final="false" visibility="public"
4985      deprecated="not deprecated">
4986      <param name="out" type="java.io.PrintWriter"/>
4987    </method>
4988    <method name="setRankdir"
4989      abstract="false" native="false" synchronized="false"
4990      static="false" final="false" visibility="public"
4991      deprecated="not deprecated">
4992      <param name="rankdir" type="java.lang.String"/>
4993    </method>
4994    <method name="postProcess"
4995      abstract="false" native="false" synchronized="false"
4996      static="false" final="false" visibility="protected"
4997      deprecated="not deprecated">
4998    </method>
4999    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5000      abstract="false" native="false" synchronized="false"
5001      static="false" final="false" visibility="protected"
5002      deprecated="not deprecated">
5003    </method>
5004    <method name="start"
5005      abstract="false" native="false" synchronized="false"
5006      static="false" final="false" visibility="protected"
5007      deprecated="not deprecated">
5008    </method>
5009    <method name="finish"
5010      abstract="false" native="false" synchronized="false"
5011      static="false" final="false" visibility="protected"
5012      deprecated="not deprecated">
5013    </method>
5014    <method name="renderNode"
5015      abstract="false" native="false" synchronized="false"
5016      static="false" final="false" visibility="protected"
5017      deprecated="not deprecated">
5018      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5019    </method>
5020    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5021      abstract="false" native="false" synchronized="false"
5022      static="false" final="false" visibility="protected"
5023      deprecated="not deprecated">
5024      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5025    </method>
5026    <method name="getNodeLabel" return="java.lang.String"
5027      abstract="false" native="false" synchronized="false"
5028      static="false" final="false" visibility="protected"
5029      deprecated="not deprecated">
5030      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5031      <doc>
5032      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5033 table with a heading at the top and (in the case of
5034 {@link ImplementationNode}s) rows for each of the member fields.]]>
5035      </doc>
5036    </method>
5037    <method name="renderEdge"
5038      abstract="false" native="false" synchronized="false"
5039      static="false" final="false" visibility="protected"
5040      deprecated="not deprecated">
5041      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5042    </method>
5043    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5044      abstract="false" native="false" synchronized="false"
5045      static="false" final="false" visibility="protected"
5046      deprecated="not deprecated">
5047      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5048    </method>
5049    <method name="getArrowString" return="java.lang.String"
5050      abstract="false" native="false" synchronized="false"
5051      static="false" final="false" visibility="protected"
5052      deprecated="not deprecated">
5053      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5054      <doc>
5055      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5056 represents combining them. With Graphviz, that just means concatenating
5057 them.]]>
5058      </doc>
5059    </method>
5060    <method name="getEdgeEndPoint" return="java.lang.String"
5061      abstract="false" native="false" synchronized="false"
5062      static="false" final="false" visibility="protected"
5063      deprecated="not deprecated">
5064      <param name="nodeId" type="java.lang.String"/>
5065      <param name="portId" type="java.lang.String"/>
5066      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5067    </method>
5068    <method name="htmlEscape" return="java.lang.String"
5069      abstract="false" native="false" synchronized="false"
5070      static="false" final="false" visibility="protected"
5071      deprecated="not deprecated">
5072      <param name="str" type="java.lang.String"/>
5073    </method>
5074    <method name="htmlEscape" return="java.util.List&lt;java.lang.String&gt;"
5075      abstract="false" native="false" synchronized="false"
5076      static="false" final="false" visibility="protected"
5077      deprecated="not deprecated">
5078      <param name="elements" type="java.util.List&lt;java.lang.String&gt;"/>
5079    </method>
5080    <method name="newInterfaceNode"
5081      abstract="false" native="false" synchronized="false"
5082      static="false" final="false" visibility="protected"
5083      deprecated="not deprecated">
5084      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
5085    </method>
5086    <method name="newImplementationNode"
5087      abstract="false" native="false" synchronized="false"
5088      static="false" final="false" visibility="protected"
5089      deprecated="not deprecated">
5090      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
5091    </method>
5092    <method name="newInstanceNode"
5093      abstract="false" native="false" synchronized="false"
5094      static="false" final="false" visibility="protected"
5095      deprecated="not deprecated">
5096      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
5097    </method>
5098    <method name="newDependencyEdge"
5099      abstract="false" native="false" synchronized="false"
5100      static="false" final="false" visibility="protected"
5101      deprecated="not deprecated">
5102      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
5103    </method>
5104    <method name="newBindingEdge"
5105      abstract="false" native="false" synchronized="false"
5106      static="false" final="false" visibility="protected"
5107      deprecated="not deprecated">
5108      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
5109    </method>
5110    <doc>
5111    <![CDATA[{@link com.google.inject.grapher.InjectorGrapher} implementation that writes out a Graphviz DOT
5112 file of the graph. Dependencies are bound in {@link GraphvizModule}.
5113 <p>
5114 Specify the {@link PrintWriter} to output to with {@link #setOut(PrintWriter)}.
5115
5116 @author phopkins@gmail.com (Pete Hopkins)
5117 @since 4.0]]>
5118    </doc>
5119  </class>
5120  <!-- end class com.google.inject.grapher.graphviz.GraphvizGrapher -->
5121  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
5122  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
5123    abstract="false"
5124    static="false" final="false" visibility="public"
5125    deprecated="not deprecated">
5126    <constructor name="GraphvizModule"
5127      static="false" final="false" visibility="public"
5128      deprecated="not deprecated">
5129    </constructor>
5130    <method name="configure"
5131      abstract="false" native="false" synchronized="false"
5132      static="false" final="false" visibility="protected"
5133      deprecated="not deprecated">
5134    </method>
5135    <doc>
5136    <![CDATA[Module that provides classes needed by {@link GraphvizGrapher}.
5137
5138 @author phopkins@gmail.com (Pete Hopkins)]]>
5139    </doc>
5140  </class>
5141  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
5142  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
5143  <class name="GraphvizNode" extends="java.lang.Object"
5144    abstract="false"
5145    static="false" final="false" visibility="public"
5146    deprecated="not deprecated">
5147    <constructor name="GraphvizNode" type="com.google.inject.grapher.NodeId"
5148      static="false" final="false" visibility="public"
5149      deprecated="not deprecated">
5150      <doc>
5151      <![CDATA[@since 4.0]]>
5152      </doc>
5153    </constructor>
5154    <method name="getNodeId" return="com.google.inject.grapher.NodeId"
5155      abstract="false" native="false" synchronized="false"
5156      static="false" final="false" visibility="public"
5157      deprecated="not deprecated">
5158      <doc>
5159      <![CDATA[@since 4.0]]>
5160      </doc>
5161    </method>
5162    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
5163      abstract="false" native="false" synchronized="false"
5164      static="false" final="false" visibility="public"
5165      deprecated="not deprecated">
5166    </method>
5167    <method name="setShape"
5168      abstract="false" native="false" synchronized="false"
5169      static="false" final="false" visibility="public"
5170      deprecated="not deprecated">
5171      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
5172    </method>
5173    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
5174      abstract="false" native="false" synchronized="false"
5175      static="false" final="false" visibility="public"
5176      deprecated="not deprecated">
5177    </method>
5178    <method name="setStyle"
5179      abstract="false" native="false" synchronized="false"
5180      static="false" final="false" visibility="public"
5181      deprecated="not deprecated">
5182      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
5183    </method>
5184    <method name="getTitle" return="java.lang.String"
5185      abstract="false" native="false" synchronized="false"
5186      static="false" final="false" visibility="public"
5187      deprecated="not deprecated">
5188    </method>
5189    <method name="setTitle"
5190      abstract="false" native="false" synchronized="false"
5191      static="false" final="false" visibility="public"
5192      deprecated="not deprecated">
5193      <param name="title" type="java.lang.String"/>
5194    </method>
5195    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
5196      abstract="false" native="false" synchronized="false"
5197      static="false" final="false" visibility="public"
5198      deprecated="not deprecated">
5199    </method>
5200    <method name="addSubtitle"
5201      abstract="false" native="false" synchronized="false"
5202      static="false" final="false" visibility="public"
5203      deprecated="not deprecated">
5204      <param name="position" type="int"/>
5205      <param name="subtitle" type="java.lang.String"/>
5206    </method>
5207    <method name="getHeaderTextColor" return="java.lang.String"
5208      abstract="false" native="false" synchronized="false"
5209      static="false" final="false" visibility="public"
5210      deprecated="not deprecated">
5211    </method>
5212    <method name="setHeaderTextColor"
5213      abstract="false" native="false" synchronized="false"
5214      static="false" final="false" visibility="public"
5215      deprecated="not deprecated">
5216      <param name="headerTextColor" type="java.lang.String"/>
5217    </method>
5218    <method name="getHeaderBackgroundColor" return="java.lang.String"
5219      abstract="false" native="false" synchronized="false"
5220      static="false" final="false" visibility="public"
5221      deprecated="not deprecated">
5222    </method>
5223    <method name="setHeaderBackgroundColor"
5224      abstract="false" native="false" synchronized="false"
5225      static="false" final="false" visibility="public"
5226      deprecated="not deprecated">
5227      <param name="headerBackgroundColor" type="java.lang.String"/>
5228    </method>
5229    <method name="addField"
5230      abstract="false" native="false" synchronized="false"
5231      static="false" final="false" visibility="public"
5232      deprecated="not deprecated">
5233      <param name="portId" type="java.lang.String"/>
5234      <param name="title" type="java.lang.String"/>
5235    </method>
5236    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5237      abstract="false" native="false" synchronized="false"
5238      static="false" final="false" visibility="public"
5239      deprecated="not deprecated">
5240    </method>
5241    <method name="getIdentifier" return="java.lang.String"
5242      abstract="false" native="false" synchronized="false"
5243      static="false" final="false" visibility="public"
5244      deprecated="not deprecated">
5245      <doc>
5246      <![CDATA[@since 4.0]]>
5247      </doc>
5248    </method>
5249    <method name="setIdentifier"
5250      abstract="false" native="false" synchronized="false"
5251      static="false" final="false" visibility="public"
5252      deprecated="not deprecated">
5253      <param name="identifier" type="java.lang.String"/>
5254      <doc>
5255      <![CDATA[@since 4.0]]>
5256      </doc>
5257    </method>
5258    <doc>
5259    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
5260 interested in drawing.
5261
5262 @author phopkins@gmail.com (Pete Hopkins)]]>
5263    </doc>
5264  </class>
5265  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
5266  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5267  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5268    abstract="false"
5269    static="false" final="true" visibility="public"
5270    deprecated="not deprecated">
5271    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5272      abstract="false" native="false" synchronized="false"
5273      static="true" final="false" visibility="public"
5274      deprecated="not deprecated">
5275    </method>
5276    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5277      abstract="false" native="false" synchronized="false"
5278      static="true" final="false" visibility="public"
5279      deprecated="not deprecated">
5280      <param name="name" type="java.lang.String"/>
5281    </method>
5282    <method name="toString" return="java.lang.String"
5283      abstract="false" native="false" synchronized="false"
5284      static="false" final="false" visibility="public"
5285      deprecated="not deprecated">
5286    </method>
5287    <doc>
5288    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5289 <p>
5290 See: http://www.graphviz.org/doc/info/shapes.html
5291
5292 @author phopkins@gmail.com (Pete Hopkins)]]>
5293    </doc>
5294  </class>
5295  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5296  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5297  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5298    abstract="false"
5299    static="false" final="true" visibility="public"
5300    deprecated="not deprecated">
5301    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5302      abstract="false" native="false" synchronized="false"
5303      static="true" final="false" visibility="public"
5304      deprecated="not deprecated">
5305    </method>
5306    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5307      abstract="false" native="false" synchronized="false"
5308      static="true" final="false" visibility="public"
5309      deprecated="not deprecated">
5310      <param name="name" type="java.lang.String"/>
5311    </method>
5312    <method name="toString" return="java.lang.String"
5313      abstract="false" native="false" synchronized="false"
5314      static="false" final="false" visibility="public"
5315      deprecated="not deprecated">
5316    </method>
5317    <doc>
5318    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5319 <p>
5320 See: http://www.graphviz.org/doc/info/attrs.html#k:style
5321
5322 @author phopkins@gmail.com (Pete Hopkins)]]>
5323    </doc>
5324  </class>
5325  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5326  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5327  <interface name="PortIdFactory"    abstract="true"
5328    static="false" final="false" visibility="public"
5329    deprecated="not deprecated">
5330    <method name="getPortId" return="java.lang.String"
5331      abstract="true" native="false" synchronized="false"
5332      static="false" final="false" visibility="public"
5333      deprecated="not deprecated">
5334      <param name="member" type="java.lang.reflect.Member"/>
5335    </method>
5336    <doc>
5337    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5338 rows in {@link com.google.inject.grapher.ImplementationNode}-displaying {@link GraphvizNode}s.
5339
5340 @author phopkins@gmail.com (Pete Hopkins)]]>
5341    </doc>
5342  </interface>
5343  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5344  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5345  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5346    abstract="false"
5347    static="false" final="false" visibility="public"
5348    deprecated="not deprecated">
5349    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5350    <constructor name="PortIdFactoryImpl"
5351      static="false" final="false" visibility="public"
5352      deprecated="not deprecated">
5353    </constructor>
5354    <method name="getPortId" return="java.lang.String"
5355      abstract="false" native="false" synchronized="false"
5356      static="false" final="false" visibility="public"
5357      deprecated="not deprecated">
5358      <param name="member" type="java.lang.reflect.Member"/>
5359    </method>
5360    <doc>
5361    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5362
5363 @author phopkins@gmail.com (Pete Hopkins)]]>
5364    </doc>
5365  </class>
5366  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5367</package>
5368<package name="com.google.inject.jndi">
5369  <!-- start class com.google.inject.jndi.JndiIntegration -->
5370  <class name="JndiIntegration" extends="java.lang.Object"
5371    abstract="false"
5372    static="false" final="false" visibility="public"
5373    deprecated="not deprecated">
5374    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5375      abstract="false" native="false" synchronized="false"
5376      static="true" final="false" visibility="public"
5377      deprecated="not deprecated">
5378      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5379      <param name="name" type="java.lang.String"/>
5380      <doc>
5381      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5382 Example usage:
5383
5384 <pre>
5385 bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5386 </pre>]]>
5387      </doc>
5388    </method>
5389    <doc>
5390    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5391 {@link javax.naming.Context}.
5392
5393 @author crazybob@google.com (Bob Lee)]]>
5394    </doc>
5395  </class>
5396  <!-- end class com.google.inject.jndi.JndiIntegration -->
5397</package>
5398<package name="com.google.inject.matcher">
5399  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5400  <class name="AbstractMatcher" extends="java.lang.Object"
5401    abstract="true"
5402    static="false" final="false" visibility="public"
5403    deprecated="not deprecated">
5404    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5405    <constructor name="AbstractMatcher"
5406      static="false" final="false" visibility="public"
5407      deprecated="not deprecated">
5408    </constructor>
5409    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5410      abstract="false" native="false" synchronized="false"
5411      static="false" final="false" visibility="public"
5412      deprecated="not deprecated">
5413      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5414    </method>
5415    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5416      abstract="false" native="false" synchronized="false"
5417      static="false" final="false" visibility="public"
5418      deprecated="not deprecated">
5419      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5420    </method>
5421    <doc>
5422    <![CDATA[Implements {@code and()} and {@code or()}.
5423
5424 @author crazybob@google.com (Bob Lee)]]>
5425    </doc>
5426  </class>
5427  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5428  <!-- start interface com.google.inject.matcher.Matcher -->
5429  <interface name="Matcher"    abstract="true"
5430    static="false" final="false" visibility="public"
5431    deprecated="not deprecated">
5432    <method name="matches" return="boolean"
5433      abstract="true" native="false" synchronized="false"
5434      static="false" final="false" visibility="public"
5435      deprecated="not deprecated">
5436      <param name="t" type="T"/>
5437      <doc>
5438      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5439      </doc>
5440    </method>
5441    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5442      abstract="true" native="false" synchronized="false"
5443      static="false" final="false" visibility="public"
5444      deprecated="not deprecated">
5445      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5446      <doc>
5447      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5448 given matcher return {@code true}.]]>
5449      </doc>
5450    </method>
5451    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5452      abstract="true" native="false" synchronized="false"
5453      static="false" final="false" visibility="public"
5454      deprecated="not deprecated">
5455      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5456      <doc>
5457      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5458 given matcher return {@code true}.]]>
5459      </doc>
5460    </method>
5461    <doc>
5462    <![CDATA[Returns {@code true} or {@code false} for a given input.
5463
5464 @author crazybob@google.com (Bob Lee)]]>
5465    </doc>
5466  </interface>
5467  <!-- end interface com.google.inject.matcher.Matcher -->
5468  <!-- start class com.google.inject.matcher.Matchers -->
5469  <class name="Matchers" extends="java.lang.Object"
5470    abstract="false"
5471    static="false" final="false" visibility="public"
5472    deprecated="not deprecated">
5473    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5474      abstract="false" native="false" synchronized="false"
5475      static="true" final="false" visibility="public"
5476      deprecated="not deprecated">
5477      <doc>
5478      <![CDATA[Returns a matcher which matches any input.]]>
5479      </doc>
5480    </method>
5481    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5482      abstract="false" native="false" synchronized="false"
5483      static="true" final="false" visibility="public"
5484      deprecated="not deprecated">
5485      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5486      <doc>
5487      <![CDATA[Inverts the given matcher.]]>
5488      </doc>
5489    </method>
5490    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5491      abstract="false" native="false" synchronized="false"
5492      static="true" final="false" visibility="public"
5493      deprecated="not deprecated">
5494      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5495      <doc>
5496      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5497 with a given annotation.]]>
5498      </doc>
5499    </method>
5500    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5501      abstract="false" native="false" synchronized="false"
5502      static="true" final="false" visibility="public"
5503      deprecated="not deprecated">
5504      <param name="annotation" type="java.lang.annotation.Annotation"/>
5505      <doc>
5506      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5507 with a given annotation.]]>
5508      </doc>
5509    </method>
5510    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5511      abstract="false" native="false" synchronized="false"
5512      static="true" final="false" visibility="public"
5513      deprecated="not deprecated">
5514      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5515      <doc>
5516      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5517 the given type).]]>
5518      </doc>
5519    </method>
5520    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5521      abstract="false" native="false" synchronized="false"
5522      static="true" final="false" visibility="public"
5523      deprecated="not deprecated">
5524      <param name="value" type="java.lang.Object"/>
5525      <doc>
5526      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5527      </doc>
5528    </method>
5529    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5530      abstract="false" native="false" synchronized="false"
5531      static="true" final="false" visibility="public"
5532      deprecated="not deprecated">
5533      <param name="value" type="java.lang.Object"/>
5534      <doc>
5535      <![CDATA[Returns a matcher which matches only the given object.]]>
5536      </doc>
5537    </method>
5538    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5539      abstract="false" native="false" synchronized="false"
5540      static="true" final="false" visibility="public"
5541      deprecated="not deprecated">
5542      <param name="targetPackage" type="java.lang.Package"/>
5543      <doc>
5544      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5545 classloader, so classes with the same package name may not have the same package at runtime.]]>
5546      </doc>
5547    </method>
5548    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5549      abstract="false" native="false" synchronized="false"
5550      static="true" final="false" visibility="public"
5551      deprecated="not deprecated">
5552      <param name="targetPackageName" type="java.lang.String"/>
5553      <doc>
5554      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5555 {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5556
5557 @since 2.0]]>
5558      </doc>
5559    </method>
5560    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5561      abstract="false" native="false" synchronized="false"
5562      static="true" final="false" visibility="public"
5563      deprecated="not deprecated">
5564      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5565      <doc>
5566      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5567      </doc>
5568    </method>
5569    <doc>
5570    <![CDATA[Matcher implementations. Supports matching classes and methods.
5571
5572 @author crazybob@google.com (Bob Lee)]]>
5573    </doc>
5574  </class>
5575  <!-- end class com.google.inject.matcher.Matchers -->
5576</package>
5577<package name="com.google.inject.multibindings">
5578  <!-- start class com.google.inject.multibindings.ClassMapKey -->
5579  <class name="ClassMapKey"    abstract="true"
5580    static="false" final="false" visibility="public"
5581    deprecated="not deprecated">
5582    <implements name="java.lang.annotation.Annotation"/>
5583    <doc>
5584    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a class map key.
5585
5586 @since 4.0]]>
5587    </doc>
5588  </class>
5589  <!-- end class com.google.inject.multibindings.ClassMapKey -->
5590  <!-- start class com.google.inject.multibindings.MapBinder -->
5591  <class name="MapBinder" extends="java.lang.Object"
5592    abstract="true"
5593    static="false" final="false" visibility="public"
5594    deprecated="not deprecated">
5595    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5596      abstract="false" native="false" synchronized="false"
5597      static="true" final="false" visibility="public"
5598      deprecated="not deprecated">
5599      <param name="binder" type="com.google.inject.Binder"/>
5600      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5601      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5602      <doc>
5603      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5604 {@link Map} that is itself bound with no binding annotation.]]>
5605      </doc>
5606    </method>
5607    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5608      abstract="false" native="false" synchronized="false"
5609      static="true" final="false" visibility="public"
5610      deprecated="not deprecated">
5611      <param name="binder" type="com.google.inject.Binder"/>
5612      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5613      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5614      <doc>
5615      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5616 {@link Map} that is itself bound with no binding annotation.]]>
5617      </doc>
5618    </method>
5619    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5620      abstract="false" native="false" synchronized="false"
5621      static="true" final="false" visibility="public"
5622      deprecated="not deprecated">
5623      <param name="binder" type="com.google.inject.Binder"/>
5624      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5625      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5626      <param name="annotation" type="java.lang.annotation.Annotation"/>
5627      <doc>
5628      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5629 {@link Map} that is itself bound with {@code annotation}.]]>
5630      </doc>
5631    </method>
5632    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5633      abstract="false" native="false" synchronized="false"
5634      static="true" final="false" visibility="public"
5635      deprecated="not deprecated">
5636      <param name="binder" type="com.google.inject.Binder"/>
5637      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5638      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5639      <param name="annotation" type="java.lang.annotation.Annotation"/>
5640      <doc>
5641      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5642 {@link Map} that is itself bound with {@code annotation}.]]>
5643      </doc>
5644    </method>
5645    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5646      abstract="false" native="false" synchronized="false"
5647      static="true" final="false" visibility="public"
5648      deprecated="not deprecated">
5649      <param name="binder" type="com.google.inject.Binder"/>
5650      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5651      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5652      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5653      <doc>
5654      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5655 {@link Map} that is itself bound with {@code annotationType}.]]>
5656      </doc>
5657    </method>
5658    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5659      abstract="false" native="false" synchronized="false"
5660      static="true" final="false" visibility="public"
5661      deprecated="not deprecated">
5662      <param name="binder" type="com.google.inject.Binder"/>
5663      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5664      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5665      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5666      <doc>
5667      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5668 {@link Map} that is itself bound with {@code annotationType}.]]>
5669      </doc>
5670    </method>
5671    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5672      abstract="true" native="false" synchronized="false"
5673      static="false" final="false" visibility="public"
5674      deprecated="not deprecated">
5675      <doc>
5676      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5677 <p>When multiple equal keys are bound, the value that gets included in the map is
5678 arbitrary.
5679 <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5680 maps that are normally bound, a {@code Map<K, Set<V>>} and
5681 {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5682 all values bound to each key.
5683 <p>
5684 When multiple modules contribute elements to the map, this configuration
5685 option impacts all of them.
5686
5687 @return this map binder
5688 @since 3.0]]>
5689      </doc>
5690    </method>
5691    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5692      abstract="true" native="false" synchronized="false"
5693      static="false" final="false" visibility="public"
5694      deprecated="not deprecated">
5695      <param name="key" type="K"/>
5696      <doc>
5697      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5698 key must be distinct (and non-null). Bound providers will be evaluated each
5699 time the map is injected.
5700
5701 <p>It is an error to call this method without also calling one of the
5702 {@code to} methods on the returned binding builder.
5703
5704 <p>Scoping elements independently is supported. Use the {@code in} method
5705 to specify a binding scope.]]>
5706      </doc>
5707    </method>
5708    <doc>
5709    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5710 a complete map. MapBinder is intended for use in your application's module:
5711 <pre><code>
5712 public class SnacksModule extends AbstractModule {
5713   protected void configure() {
5714     MapBinder&lt;String, Snack&gt; mapbinder
5715         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5716     mapbinder.addBinding("twix").toInstance(new Twix());
5717     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5718     mapbinder.addBinding("skittles").to(Skittles.class);
5719   }
5720 }</code></pre>
5721
5722 <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5723 injected:
5724 <pre><code>
5725 class SnackMachine {
5726   {@literal @}Inject
5727   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5728 }</code></pre>
5729
5730 <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5731 {@code Map<K, Provider<V>>} for lazy value provision:
5732 <pre><code>
5733 class SnackMachine {
5734   {@literal @}Inject
5735   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5736 }</code></pre>
5737
5738 <p>Contributing mapbindings from different modules is supported. For example,
5739 it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5740 create their own {@code MapBinder<String, Snack>}, and to each contribute
5741 bindings to the snacks map. When that map is injected, it will contain
5742 entries from both modules.
5743
5744 <p>The map's iteration order is consistent with the binding order. This is
5745 convenient when multiple elements are contributed by the same module because
5746 that module can order its bindings appropriately. Avoid relying on the
5747 iteration order of elements contributed by different modules, since there is
5748 no equivalent mechanism to order modules.
5749
5750 <p>The map is unmodifiable.  Elements can only be added to the map by
5751 configuring the MapBinder.  Elements can never be removed from the map.
5752
5753 <p>Values are resolved at map injection time. If a value is bound to a
5754 provider, that provider's get method will be called each time the map is
5755 injected (unless the binding is also scoped, or a map of providers is injected).
5756
5757 <p>Annotations are used to create different maps of the same key/value
5758 type. Each distinct annotation gets its own independent map.
5759
5760 <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5761 once, map injection will fail. However, use {@link #permitDuplicates()} in
5762 order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5763 {@code Map<K, Set<Provider<V>>} will be added.
5764
5765 <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5766 throw an unchecked exception.
5767
5768 <p><strong>Values must be non-null to use map injection.</strong> If any
5769 value is null, map injection will fail (although injecting a map of providers
5770 will not).
5771
5772 @author dpb@google.com (David P. Baker)]]>
5773    </doc>
5774  </class>
5775  <!-- end class com.google.inject.multibindings.MapBinder -->
5776  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5777  <interface name="MapBinderBinding"    abstract="true"
5778    static="false" final="false" visibility="public"
5779    deprecated="not deprecated">
5780    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5781      abstract="true" native="false" synchronized="false"
5782      static="false" final="false" visibility="public"
5783      deprecated="not deprecated">
5784      <doc>
5785      <![CDATA[Returns the {@link Key} for the map.]]>
5786      </doc>
5787    </method>
5788    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5789      abstract="true" native="false" synchronized="false"
5790      static="false" final="false" visibility="public"
5791      deprecated="not deprecated">
5792      <doc>
5793      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5794 <p>
5795 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5796 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5797 <code>TypeLiteral&lt;String></code>.]]>
5798      </doc>
5799    </method>
5800    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5801      abstract="true" native="false" synchronized="false"
5802      static="false" final="false" visibility="public"
5803      deprecated="not deprecated">
5804      <doc>
5805      <![CDATA[Returns the TypeLiteral describing the values of the map.
5806 <p>
5807 The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5808 returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5809 <code>TypeLiteral&lt;Snack></code>.]]>
5810      </doc>
5811    </method>
5812    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5813      abstract="true" native="false" synchronized="false"
5814      static="false" final="false" visibility="public"
5815      deprecated="not deprecated">
5816      <doc>
5817      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5818 to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5819 This is only supported on bindings returned from an injector. This will throw
5820 {@link UnsupportedOperationException} if it is called on an element retrieved from
5821 {@link Elements#getElements}.
5822 <p>
5823 The elements will always match the type Map's generic type. For example, if getMapKey returns a
5824 key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5825 <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5826      </doc>
5827    </method>
5828    <method name="permitsDuplicates" return="boolean"
5829      abstract="true" native="false" synchronized="false"
5830      static="false" final="false" visibility="public"
5831      deprecated="not deprecated">
5832      <doc>
5833      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5834 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5835 MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5836      </doc>
5837    </method>
5838    <method name="containsElement" return="boolean"
5839      abstract="true" native="false" synchronized="false"
5840      static="false" final="false" visibility="public"
5841      deprecated="not deprecated">
5842      <param name="element" type="com.google.inject.spi.Element"/>
5843      <doc>
5844      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5845 given Element in order to support building and injecting the map. This will work for
5846 MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5847 only necessary if you are working with elements retrieved from modules (without an Injector),
5848 otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5849 <p>
5850 If you need to introspect the details of the map, such as the keys, values or if it permits
5851 duplicates, it is necessary to pass the elements through an Injector and use
5852 {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5853      </doc>
5854    </method>
5855    <doc>
5856    <![CDATA[A binding for a MapBinder.
5857 <p>
5858 Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5859 &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5860 Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5861 MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5862 bindings can be validated to be derived from this MapBinderBinding using
5863 {@link #containsElement(Element)}.
5864
5865 @param <T> The fully qualified type of the map, including Map. For example:
5866          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5867
5868 @since 3.0
5869 @author sameb@google.com (Sam Berlin)]]>
5870    </doc>
5871  </interface>
5872  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5873  <!-- start class com.google.inject.multibindings.MapKey -->
5874  <class name="MapKey"    abstract="true"
5875    static="false" final="false" visibility="public"
5876    deprecated="not deprecated">
5877    <implements name="java.lang.annotation.Annotation"/>
5878    <doc>
5879    <![CDATA[Allows users define customized key type annotations for map bindings by annotating an annotation
5880 of a {@code Map}'s key type. The custom key annotation can be applied to methods also annotated
5881 with {@literal @}{@link ProvidesIntoMap}.
5882
5883 <p>A {@link StringMapKey} and {@link ClassMapKey} are provided for convenience with maps whose
5884 keys are strings or classes. For maps with enums or primitive types as keys, you must provide
5885 your own MapKey annotation, such as this one for an enum:
5886
5887 <pre>
5888 {@literal @}MapKey(unwrapValue = true)
5889 {@literal @}Retention(RUNTIME)
5890 public {@literal @}interface MyCustomEnumKey {
5891   MyCustomEnum value();
5892 }
5893 </pre>
5894
5895 You can also use the whole annotation as the key, if {@code unwrapValue=false}.
5896 When unwrapValue is false, the annotation type will be the key type for the injected map and
5897 the annotation instances will be the key values. If {@code unwrapValue=true}, the value() type
5898 will be the key type for injected map and the value() instances will be the keys values.
5899
5900 @since 4.0]]>
5901    </doc>
5902  </class>
5903  <!-- end class com.google.inject.multibindings.MapKey -->
5904  <!-- start class com.google.inject.multibindings.Multibinder -->
5905  <class name="Multibinder" extends="java.lang.Object"
5906    abstract="true"
5907    static="false" final="false" visibility="public"
5908    deprecated="not deprecated">
5909    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5910      abstract="false" native="false" synchronized="false"
5911      static="true" final="false" visibility="public"
5912      deprecated="not deprecated">
5913      <param name="binder" type="com.google.inject.Binder"/>
5914      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5915      <doc>
5916      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5917 itself bound with no binding annotation.]]>
5918      </doc>
5919    </method>
5920    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5921      abstract="false" native="false" synchronized="false"
5922      static="true" final="false" visibility="public"
5923      deprecated="not deprecated">
5924      <param name="binder" type="com.google.inject.Binder"/>
5925      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5926      <doc>
5927      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5928 itself bound with no binding annotation.]]>
5929      </doc>
5930    </method>
5931    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5932      abstract="false" native="false" synchronized="false"
5933      static="true" final="false" visibility="public"
5934      deprecated="not deprecated">
5935      <param name="binder" type="com.google.inject.Binder"/>
5936      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5937      <param name="annotation" type="java.lang.annotation.Annotation"/>
5938      <doc>
5939      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5940 itself bound with {@code annotation}.]]>
5941      </doc>
5942    </method>
5943    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5944      abstract="false" native="false" synchronized="false"
5945      static="true" final="false" visibility="public"
5946      deprecated="not deprecated">
5947      <param name="binder" type="com.google.inject.Binder"/>
5948      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5949      <param name="annotation" type="java.lang.annotation.Annotation"/>
5950      <doc>
5951      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5952 itself bound with {@code annotation}.]]>
5953      </doc>
5954    </method>
5955    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5956      abstract="false" native="false" synchronized="false"
5957      static="true" final="false" visibility="public"
5958      deprecated="not deprecated">
5959      <param name="binder" type="com.google.inject.Binder"/>
5960      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5961      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5962      <doc>
5963      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5964 itself bound with {@code annotationType}.]]>
5965      </doc>
5966    </method>
5967    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5968      abstract="false" native="false" synchronized="false"
5969      static="true" final="false" visibility="public"
5970      deprecated="not deprecated">
5971      <param name="binder" type="com.google.inject.Binder"/>
5972      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
5973      <doc>
5974      <![CDATA[Returns a new multibinder that collects instances of the key's type in a {@link Set} that is
5975 itself bound with the annotation (if any) of the key.
5976
5977 @since 4.0]]>
5978      </doc>
5979    </method>
5980    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5981      abstract="false" native="false" synchronized="false"
5982      static="true" final="false" visibility="public"
5983      deprecated="not deprecated">
5984      <param name="binder" type="com.google.inject.Binder"/>
5985      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5986      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5987      <doc>
5988      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5989 itself bound with {@code annotationType}.]]>
5990      </doc>
5991    </method>
5992    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5993      abstract="true" native="false" synchronized="false"
5994      static="false" final="false" visibility="public"
5995      deprecated="not deprecated">
5996      <doc>
5997      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5998 bound, the one that gets included is arbitrary. When multiple modules contribute elements to
5999 the set, this configuration option impacts all of them.
6000
6001 @return this multibinder
6002 @since 3.0]]>
6003      </doc>
6004    </method>
6005    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6006      abstract="true" native="false" synchronized="false"
6007      static="false" final="false" visibility="public"
6008      deprecated="not deprecated">
6009      <doc>
6010      <![CDATA[Returns a binding builder used to add a new element in the set. Each
6011 bound element must have a distinct value. Bound providers will be
6012 evaluated each time the set is injected.
6013
6014 <p>It is an error to call this method without also calling one of the
6015 {@code to} methods on the returned binding builder.
6016
6017 <p>Scoping elements independently is supported. Use the {@code in} method
6018 to specify a binding scope.]]>
6019      </doc>
6020    </method>
6021    <doc>
6022    <![CDATA[An API to bind multiple values separately, only to later inject them as a
6023 complete collection. Multibinder is intended for use in your application's
6024 module:
6025 <pre><code>
6026 public class SnacksModule extends AbstractModule {
6027   protected void configure() {
6028     Multibinder&lt;Snack&gt; multibinder
6029         = Multibinder.newSetBinder(binder(), Snack.class);
6030     multibinder.addBinding().toInstance(new Twix());
6031     multibinder.addBinding().toProvider(SnickersProvider.class);
6032     multibinder.addBinding().to(Skittles.class);
6033   }
6034 }</code></pre>
6035
6036 <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
6037 <pre><code>
6038 class SnackMachine {
6039   {@literal @}Inject
6040   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
6041 }</code></pre>
6042
6043 If desired, {@link Collection}{@code <Provider<Snack>>} can also be injected.
6044
6045 <p>Contributing multibindings from different modules is supported. For
6046 example, it is okay for both {@code CandyModule} and {@code ChipsModule}
6047 to create their own {@code Multibinder<Snack>}, and to each contribute
6048 bindings to the set of snacks. When that set is injected, it will contain
6049 elements from both modules.
6050
6051 <p>The set's iteration order is consistent with the binding order. This is
6052 convenient when multiple elements are contributed by the same module because
6053 that module can order its bindings appropriately. Avoid relying on the
6054 iteration order of elements contributed by different modules, since there is
6055 no equivalent mechanism to order modules.
6056
6057 <p>The set is unmodifiable.  Elements can only be added to the set by
6058 configuring the multibinder.  Elements can never be removed from the set.
6059
6060 <p>Elements are resolved at set injection time. If an element is bound to a
6061 provider, that provider's get method will be called each time the set is
6062 injected (unless the binding is also scoped).
6063
6064 <p>Annotations are be used to create different sets of the same element
6065 type. Each distinct annotation gets its own independent collection of
6066 elements.
6067
6068 <p><strong>Elements must be distinct.</strong> If multiple bound elements
6069 have the same value, set injection will fail.
6070
6071 <p><strong>Elements must be non-null.</strong> If any set element is null,
6072 set injection will fail.
6073
6074 @author jessewilson@google.com (Jesse Wilson)]]>
6075    </doc>
6076  </class>
6077  <!-- end class com.google.inject.multibindings.Multibinder -->
6078  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
6079  <interface name="MultibinderBinding"    abstract="true"
6080    static="false" final="false" visibility="public"
6081    deprecated="not deprecated">
6082    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
6083      abstract="true" native="false" synchronized="false"
6084      static="false" final="false" visibility="public"
6085      deprecated="not deprecated">
6086      <doc>
6087      <![CDATA[Returns the key for the set.]]>
6088      </doc>
6089    </method>
6090    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
6091      abstract="true" native="false" synchronized="false"
6092      static="false" final="false" visibility="public"
6093      deprecated="not deprecated">
6094      <doc>
6095      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6096 <p>
6097 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6098 key of <code>Set&lt;String></code>, then this will always return a
6099 <code>TypeLiteral&lt;String></code>.]]>
6100      </doc>
6101    </method>
6102    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6103      abstract="true" native="false" synchronized="false"
6104      static="false" final="false" visibility="public"
6105      deprecated="not deprecated">
6106      <doc>
6107      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6108 injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6109 retrieved from {@link Elements#getElements}.
6110 <p>
6111 The elements will always match the type Set's generic type. For example, if getSetKey returns a
6112 key of <code>Set&lt;String></code>, then this will always return a list of type
6113 <code>List&lt;Binding&lt;String>></code>.]]>
6114      </doc>
6115    </method>
6116    <method name="permitsDuplicates" return="boolean"
6117      abstract="true" native="false" synchronized="false"
6118      static="false" final="false" visibility="public"
6119      deprecated="not deprecated">
6120      <doc>
6121      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6122 from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6123 MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6124      </doc>
6125    </method>
6126    <method name="containsElement" return="boolean"
6127      abstract="true" native="false" synchronized="false"
6128      static="false" final="false" visibility="public"
6129      deprecated="not deprecated">
6130      <param name="element" type="com.google.inject.spi.Element"/>
6131      <doc>
6132      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6133 derive the elements of the set and other bindings that Multibinder uses internally. This will
6134 work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6135 Usually this is only necessary if you are working with elements retrieved from modules (without
6136 an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6137 <p>
6138 If you need to introspect the details of the set, such as the values or if it permits
6139 duplicates, it is necessary to pass the elements through an Injector and use
6140 {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6141      </doc>
6142    </method>
6143    <doc>
6144    <![CDATA[A binding for a Multibinder.
6145
6146 @param <T> The fully qualified type of the set, including Set. For example:
6147          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6148
6149 @since 3.0
6150 @author sameb@google.com (Sam Berlin)]]>
6151    </doc>
6152  </interface>
6153  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6154  <!-- start class com.google.inject.multibindings.MultibindingsScanner -->
6155  <class name="MultibindingsScanner" extends="java.lang.Object"
6156    abstract="false"
6157    static="false" final="false" visibility="public"
6158    deprecated="not deprecated">
6159    <method name="asModule" return="com.google.inject.Module"
6160      abstract="false" native="false" synchronized="false"
6161      static="true" final="false" visibility="public"
6162      deprecated="not deprecated">
6163      <doc>
6164      <![CDATA[Returns a module that, when installed, will scan all modules for methods with the annotations
6165 {@literal @}{@link ProvidesIntoMap}, {@literal @}{@link ProvidesIntoSet}, and
6166 {@literal @}{@link ProvidesIntoOptional}.
6167
6168 <p>This is a convenience method, equivalent to doing
6169 {@code binder().scanModulesForAnnotatedMethods(MultibindingsScanner.scanner())}.]]>
6170      </doc>
6171    </method>
6172    <method name="scanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
6173      abstract="false" native="false" synchronized="false"
6174      static="true" final="false" visibility="public"
6175      deprecated="not deprecated">
6176      <doc>
6177      <![CDATA[Returns a {@link ModuleAnnotatedMethodScanner} that, when bound, will scan all modules for
6178 methods with the annotations {@literal @}{@link ProvidesIntoMap},
6179 {@literal @}{@link ProvidesIntoSet}, and {@literal @}{@link ProvidesIntoOptional}.]]>
6180      </doc>
6181    </method>
6182    <doc>
6183    <![CDATA[Scans a module for annotations that signal multibindings, mapbindings, and optional bindings.
6184
6185 @since 4.0]]>
6186    </doc>
6187  </class>
6188  <!-- end class com.google.inject.multibindings.MultibindingsScanner -->
6189  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6190  <interface name="MultibindingsTargetVisitor"    abstract="true"
6191    static="false" final="false" visibility="public"
6192    deprecated="not deprecated">
6193    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6194    <method name="visit" return="V"
6195      abstract="true" native="false" synchronized="false"
6196      static="false" final="false" visibility="public"
6197      deprecated="not deprecated">
6198      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6199      <doc>
6200      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6201      </doc>
6202    </method>
6203    <method name="visit" return="V"
6204      abstract="true" native="false" synchronized="false"
6205      static="false" final="false" visibility="public"
6206      deprecated="not deprecated">
6207      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6208      <doc>
6209      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6210      </doc>
6211    </method>
6212    <method name="visit" return="V"
6213      abstract="true" native="false" synchronized="false"
6214      static="false" final="false" visibility="public"
6215      deprecated="not deprecated">
6216      <param name="optionalbinding" type="com.google.inject.multibindings.OptionalBinderBinding&lt;? extends T&gt;"/>
6217      <doc>
6218      <![CDATA[Visits a binding created through {@link OptionalBinder}.
6219
6220 @since 4.0]]>
6221      </doc>
6222    </method>
6223    <doc>
6224    <![CDATA[A visitor for the multibinder extension.
6225 <p>
6226 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6227 {@link Multibinder}, {@link MapBinder} or {@link OptionalBinderBinding} will be visited through
6228 this interface.
6229
6230 @since 3.0
6231 @author sameb@google.com (Sam Berlin)]]>
6232    </doc>
6233  </interface>
6234  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6235  <!-- start class com.google.inject.multibindings.OptionalBinder -->
6236  <class name="OptionalBinder" extends="java.lang.Object"
6237    abstract="true"
6238    static="false" final="false" visibility="public"
6239    deprecated="not deprecated">
6240    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6241      abstract="false" native="false" synchronized="false"
6242      static="true" final="false" visibility="public"
6243      deprecated="not deprecated">
6244      <param name="binder" type="com.google.inject.Binder"/>
6245      <param name="type" type="java.lang.Class&lt;T&gt;"/>
6246    </method>
6247    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6248      abstract="false" native="false" synchronized="false"
6249      static="true" final="false" visibility="public"
6250      deprecated="not deprecated">
6251      <param name="binder" type="com.google.inject.Binder"/>
6252      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
6253    </method>
6254    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6255      abstract="false" native="false" synchronized="false"
6256      static="true" final="false" visibility="public"
6257      deprecated="not deprecated">
6258      <param name="binder" type="com.google.inject.Binder"/>
6259      <param name="type" type="com.google.inject.Key&lt;T&gt;"/>
6260    </method>
6261    <method name="setDefault" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6262      abstract="true" native="false" synchronized="false"
6263      static="false" final="false" visibility="public"
6264      deprecated="not deprecated">
6265      <doc>
6266      <![CDATA[Returns a binding builder used to set the default value that will be injected.
6267 The binding set by this method will be ignored if {@link #setBinding} is called.
6268
6269 <p>It is an error to call this method without also calling one of the {@code to}
6270 methods on the returned binding builder.]]>
6271      </doc>
6272    </method>
6273    <method name="setBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6274      abstract="true" native="false" synchronized="false"
6275      static="false" final="false" visibility="public"
6276      deprecated="not deprecated">
6277      <doc>
6278      <![CDATA[Returns a binding builder used to set the actual value that will be injected.
6279 This overrides any binding set by {@link #setDefault}.
6280
6281 <p>It is an error to call this method without also calling one of the {@code to}
6282 methods on the returned binding builder.]]>
6283      </doc>
6284    </method>
6285    <doc>
6286    <![CDATA[An API to bind optional values, optionally with a default value.
6287 OptionalBinder fulfills two roles: <ol>
6288 <li>It allows a framework to define an injection point that may or
6289     may not be bound by users.
6290 <li>It allows a framework to supply a default value that can be changed
6291     by users.
6292 </ol>
6293
6294 <p>When an OptionalBinder is added, it will always supply the bindings:
6295 {@code Optional<T>} and {@code Optional<Provider<T>>}.  If
6296 {@link #setBinding} or {@link #setDefault} are called, it will also
6297 bind {@code T}.
6298
6299 <p>{@code setDefault} is intended for use by frameworks that need a default
6300 value.  User code can call {@code setBinding} to override the default.
6301 <b>Warning: Even if setBinding is called, the default binding
6302 will still exist in the object graph.  If it is a singleton, it will be
6303 instantiated in {@code Stage.PRODUCTION}.</b>
6304
6305 <p>If setDefault or setBinding are linked to Providers, the Provider may return
6306 {@code null}.  If it does, the Optional bindings will be absent.  Binding
6307 setBinding to a Provider that returns null will not cause OptionalBinder
6308 to fall back to the setDefault binding.
6309
6310 <p>If neither setDefault nor setBinding are called, it will try to link to a
6311 user-supplied binding of the same type.  If no binding exists, the optionals
6312 will be absent.  Otherwise, if a user-supplied binding of that type exists,
6313 or if setBinding or setDefault are called, the optionals will return present
6314 if they are bound to a non-null value.
6315
6316 <p>Values are resolved at injection time. If a value is bound to a
6317 provider, that provider's get method will be called each time the optional
6318 is injected (unless the binding is also scoped, or an optional of provider is
6319 injected).
6320
6321 <p>Annotations are used to create different optionals of the same key/value
6322 type. Each distinct annotation gets its own independent binding.
6323
6324 <pre><code>
6325 public class FrameworkModule extends AbstractModule {
6326   protected void configure() {
6327     OptionalBinder.newOptionalBinder(binder(), Renamer.class);
6328   }
6329 }</code></pre>
6330
6331 <p>With this module, an {@link Optional}{@code <Renamer>} can now be
6332 injected.  With no other bindings, the optional will be absent.
6333 Users can specify bindings in one of two ways:
6334
6335 <p>Option 1:
6336 <pre><code>
6337 public class UserRenamerModule extends AbstractModule {
6338   protected void configure() {
6339     bind(Renamer.class).to(ReplacingRenamer.class);
6340   }
6341 }</code></pre>
6342
6343 <p>or Option 2:
6344 <pre><code>
6345 public class UserRenamerModule extends AbstractModule {
6346   protected void configure() {
6347     OptionalBinder.newOptionalBinder(binder(), Renamer.class)
6348         .setBinding().to(ReplacingRenamer.class);
6349   }
6350 }</code></pre>
6351 With both options, the {@code Optional<Renamer>} will be present and supply the
6352 ReplacingRenamer.
6353
6354 <p>Default values can be supplied using:
6355 <pre><code>
6356 public class FrameworkModule extends AbstractModule {
6357   protected void configure() {
6358     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6359         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6360   }
6361 }</code></pre>
6362 With the above module, code can inject an {@code @LookupUrl String} and it
6363 will supply the DEFAULT_LOOKUP_URL.  A user can change this value by binding
6364 <pre><code>
6365 public class UserLookupModule extends AbstractModule {
6366   protected void configure() {
6367     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6368         .setBinding().toInstance(CUSTOM_LOOKUP_URL);
6369   }
6370 }</code></pre>
6371 ... which will override the default value.
6372
6373 <p>If one module uses setDefault the only way to override the default is to use setBinding.
6374 It is an error for a user to specify the binding without using OptionalBinder if
6375 setDefault or setBinding are called.  For example,
6376 <pre><code>
6377 public class FrameworkModule extends AbstractModule {
6378   protected void configure() {
6379     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6380         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6381   }
6382 }
6383 public class UserLookupModule extends AbstractModule {
6384   protected void configure() {
6385     bind(Key.get(String.class, LookupUrl.class)).toInstance(CUSTOM_LOOKUP_URL);
6386   }
6387 }</code></pre>
6388 ... would generate an error, because both the framework and the user are trying to bind
6389 {@code @LookupUrl String}.
6390
6391 @author sameb@google.com (Sam Berlin)
6392 @since 4.0]]>
6393    </doc>
6394  </class>
6395  <!-- end class com.google.inject.multibindings.OptionalBinder -->
6396  <!-- start interface com.google.inject.multibindings.OptionalBinderBinding -->
6397  <interface name="OptionalBinderBinding"    abstract="true"
6398    static="false" final="false" visibility="public"
6399    deprecated="not deprecated">
6400    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
6401      abstract="true" native="false" synchronized="false"
6402      static="false" final="false" visibility="public"
6403      deprecated="not deprecated">
6404      <doc>
6405      <![CDATA[Returns the {@link Key} for this binding.]]>
6406      </doc>
6407    </method>
6408    <method name="getDefaultBinding" return="com.google.inject.Binding&lt;?&gt;"
6409      abstract="true" native="false" synchronized="false"
6410      static="false" final="false" visibility="public"
6411      deprecated="not deprecated">
6412      <doc>
6413      <![CDATA[Returns the default binding (set by {@link OptionalBinder#setDefault}) if one exists or null
6414 if no default binding is set. This will throw {@link UnsupportedOperationException} if it is
6415 called on an element retrieved from {@link Elements#getElements}.
6416 <p>
6417 The Binding's type will always match the type Optional's generic type. For example, if getKey
6418 returns a key of <code>Optional&lt;String></code>, then this will always return a
6419 <code>Binding&lt;String></code>.]]>
6420      </doc>
6421    </method>
6422    <method name="getActualBinding" return="com.google.inject.Binding&lt;?&gt;"
6423      abstract="true" native="false" synchronized="false"
6424      static="false" final="false" visibility="public"
6425      deprecated="not deprecated">
6426      <doc>
6427      <![CDATA[Returns the actual binding (set by {@link OptionalBinder#setBinding}) or null if not set.
6428 This will throw {@link UnsupportedOperationException} if it is called on an element retrieved
6429 from {@link Elements#getElements}.
6430 <p>
6431 The Binding's type will always match the type Optional's generic type. For example, if getKey
6432 returns a key of <code>Optional&lt;String></code>, then this will always return a
6433 <code>Binding&lt;String></code>.]]>
6434      </doc>
6435    </method>
6436    <method name="containsElement" return="boolean"
6437      abstract="true" native="false" synchronized="false"
6438      static="false" final="false" visibility="public"
6439      deprecated="not deprecated">
6440      <param name="element" type="com.google.inject.spi.Element"/>
6441      <doc>
6442      <![CDATA[Returns true if this OptionalBinder contains the given Element in order to build the optional
6443 binding or uses the given Element in order to support building and injecting its data. This
6444 will work for OptionalBinderBinding retrieved from an injector and
6445 {@link Elements#getElements}. Usually this is only necessary if you are working with elements
6446 retrieved from modules (without an Injector), otherwise {@link #getDefaultBinding} and
6447 {@link #getActualBinding} are better options.]]>
6448      </doc>
6449    </method>
6450    <doc>
6451    <![CDATA[A binding for a OptionalBinder.
6452
6453 <p>Although OptionalBinders may be injected through a variety of types
6454 {@code T}, {@code Optional<T>}, {@code Optional<Provider<T>>}, etc..), an
6455 OptionalBinderBinding exists only on the Binding associated with the
6456 {@code Optional<T>} key.  Other bindings can be validated to be derived from this
6457 OptionalBinderBinding using {@link #containsElement}.
6458
6459 @param <T> The fully qualified type of the optional binding, including Optional.
6460        For example: {@code Optional<String>}.
6461
6462 @since 4.0
6463 @author sameb@google.com (Sam Berlin)]]>
6464    </doc>
6465  </interface>
6466  <!-- end interface com.google.inject.multibindings.OptionalBinderBinding -->
6467  <!-- start class com.google.inject.multibindings.ProvidesIntoMap -->
6468  <class name="ProvidesIntoMap"    abstract="true"
6469    static="false" final="false" visibility="public"
6470    deprecated="not deprecated">
6471    <implements name="java.lang.annotation.Annotation"/>
6472    <doc>
6473    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link MapBinder}.
6474 The method's return type, binding annotation and additional key annotation determines
6475 what Map this will contribute to. For example,
6476
6477 <pre>
6478 {@literal @}ProvidesIntoMap
6479 {@literal @}StringMapKey("Foo")
6480 {@literal @}Named("plugins")
6481 Plugin provideFooUrl(FooManager fm) { return fm.getPlugin(); }
6482
6483 {@literal @}ProvidesIntoMap
6484 {@literal @}StringMapKey("Bar")
6485 {@literal @}Named("urls")
6486 Plugin provideBarUrl(BarManager bm) { return bm.getPlugin(); }
6487 </pre>
6488
6489 will add two items to the {@code @Named("urls") Map<String, Plugin>} map. The key 'Foo'
6490 will map to the provideFooUrl method, and the key 'Bar' will map to the provideBarUrl method.
6491 The values are bound as providers and will be evaluated at injection time.
6492
6493 <p>Because the key is specified as an annotation, only Strings, Classes, enums, primitive
6494 types and annotation instances are supported as keys.
6495
6496 @author sameb@google.com (Sam Berlin)
6497 @since 4.0]]>
6498    </doc>
6499  </class>
6500  <!-- end class com.google.inject.multibindings.ProvidesIntoMap -->
6501  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional -->
6502  <class name="ProvidesIntoOptional"    abstract="true"
6503    static="false" final="false" visibility="public"
6504    deprecated="not deprecated">
6505    <implements name="java.lang.annotation.Annotation"/>
6506    <doc>
6507    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6508 The method's return type and binding annotation determines what Optional this will
6509 contribute to. For example,
6510
6511 <pre>
6512 {@literal @}ProvidesIntoOptional(DEFAULT)
6513 {@literal @}Named("url")
6514 String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6515
6516 {@literal @}ProvidesIntoOptional(ACTUAL)
6517 {@literal @}Named("url")
6518 String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6519 </pre>
6520
6521 will set the default value of {@code @Named("url") Optional<String>} to foo's URL,
6522 and then override it to bar's URL.
6523
6524 @author sameb@google.com (Sam Berlin)
6525 @since 4.0]]>
6526    </doc>
6527  </class>
6528  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional -->
6529  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6530  <class name="ProvidesIntoOptional.Type" extends="java.lang.Enum&lt;com.google.inject.multibindings.ProvidesIntoOptional.Type&gt;"
6531    abstract="false"
6532    static="true" final="true" visibility="public"
6533    deprecated="not deprecated">
6534    <method name="values" return="com.google.inject.multibindings.ProvidesIntoOptional.Type[]"
6535      abstract="false" native="false" synchronized="false"
6536      static="true" final="false" visibility="public"
6537      deprecated="not deprecated">
6538    </method>
6539    <method name="valueOf" return="com.google.inject.multibindings.ProvidesIntoOptional.Type"
6540      abstract="false" native="false" synchronized="false"
6541      static="true" final="false" visibility="public"
6542      deprecated="not deprecated">
6543      <param name="name" type="java.lang.String"/>
6544    </method>
6545    <doc>
6546    <![CDATA[@since 4.0]]>
6547    </doc>
6548  </class>
6549  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6550  <!-- start class com.google.inject.multibindings.ProvidesIntoSet -->
6551  <class name="ProvidesIntoSet"    abstract="true"
6552    static="false" final="false" visibility="public"
6553    deprecated="not deprecated">
6554    <implements name="java.lang.annotation.Annotation"/>
6555    <doc>
6556    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6557 The method's return type and binding annotation determines what Set this will
6558 contribute to. For example,
6559
6560 <pre>
6561 {@literal @}ProvidesIntoSet
6562 {@literal @}Named("urls")
6563 String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6564
6565 {@literal @}ProvidesIntoSet
6566 {@literal @}Named("urls")
6567 String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6568 </pre>
6569
6570 will add two items to the {@code @Named("urls") Set<String>} set. The items are bound as
6571 providers and will be evaluated at injection time.
6572
6573 @author sameb@google.com (Sam Berlin)
6574 @since 4.0]]>
6575    </doc>
6576  </class>
6577  <!-- end class com.google.inject.multibindings.ProvidesIntoSet -->
6578  <!-- start class com.google.inject.multibindings.StringMapKey -->
6579  <class name="StringMapKey"    abstract="true"
6580    static="false" final="false" visibility="public"
6581    deprecated="not deprecated">
6582    <implements name="java.lang.annotation.Annotation"/>
6583    <doc>
6584    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a string map key.
6585
6586 @since 4.0]]>
6587    </doc>
6588  </class>
6589  <!-- end class com.google.inject.multibindings.StringMapKey -->
6590</package>
6591<package name="com.google.inject.name">
6592  <!-- start class com.google.inject.name.Named -->
6593  <class name="Named"    abstract="true"
6594    static="false" final="false" visibility="public"
6595    deprecated="not deprecated">
6596    <implements name="java.lang.annotation.Annotation"/>
6597    <doc>
6598    <![CDATA[Annotates named things.
6599
6600 @author crazybob@google.com (Bob Lee)]]>
6601    </doc>
6602  </class>
6603  <!-- end class com.google.inject.name.Named -->
6604  <!-- start class com.google.inject.name.Names -->
6605  <class name="Names" extends="java.lang.Object"
6606    abstract="false"
6607    static="false" final="false" visibility="public"
6608    deprecated="not deprecated">
6609    <method name="named" return="com.google.inject.name.Named"
6610      abstract="false" native="false" synchronized="false"
6611      static="true" final="false" visibility="public"
6612      deprecated="not deprecated">
6613      <param name="name" type="java.lang.String"/>
6614      <doc>
6615      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6616      </doc>
6617    </method>
6618    <method name="bindProperties"
6619      abstract="false" native="false" synchronized="false"
6620      static="true" final="false" visibility="public"
6621      deprecated="not deprecated">
6622      <param name="binder" type="com.google.inject.Binder"/>
6623      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6624      <doc>
6625      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6626 {@code properties}.]]>
6627      </doc>
6628    </method>
6629    <method name="bindProperties"
6630      abstract="false" native="false" synchronized="false"
6631      static="true" final="false" visibility="public"
6632      deprecated="not deprecated">
6633      <param name="binder" type="com.google.inject.Binder"/>
6634      <param name="properties" type="java.util.Properties"/>
6635      <doc>
6636      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6637 method binds all properties including those inherited from
6638 {@link Properties#defaults defaults}.]]>
6639      </doc>
6640    </method>
6641    <doc>
6642    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6643
6644 @author crazybob@google.com (Bob Lee)]]>
6645    </doc>
6646  </class>
6647  <!-- end class com.google.inject.name.Names -->
6648</package>
6649<package name="com.google.inject.persist">
6650  <!-- start class com.google.inject.persist.PersistFilter -->
6651  <class name="PersistFilter" extends="java.lang.Object"
6652    abstract="false"
6653    static="false" final="true" visibility="public"
6654    deprecated="not deprecated">
6655    <implements name="javax.servlet.Filter"/>
6656    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6657      static="false" final="false" visibility="public"
6658      deprecated="not deprecated">
6659    </constructor>
6660    <method name="init"
6661      abstract="false" native="false" synchronized="false"
6662      static="false" final="false" visibility="public"
6663      deprecated="not deprecated">
6664      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
6665      <exception name="ServletException" type="javax.servlet.ServletException"/>
6666    </method>
6667    <method name="destroy"
6668      abstract="false" native="false" synchronized="false"
6669      static="false" final="false" visibility="public"
6670      deprecated="not deprecated">
6671    </method>
6672    <method name="doFilter"
6673      abstract="false" native="false" synchronized="false"
6674      static="false" final="false" visibility="public"
6675      deprecated="not deprecated">
6676      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
6677      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
6678      <param name="filterChain" type="javax.servlet.FilterChain"/>
6679      <exception name="IOException" type="java.io.IOException"/>
6680      <exception name="ServletException" type="javax.servlet.ServletException"/>
6681    </method>
6682    <doc>
6683    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6684 guice-persist manage the lifecycle of active units of work.
6685 The filter automatically starts and stops the relevant {@link PersistService}
6686 upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6687 {@link javax.servlet.Filter#destroy()} respectively.
6688
6689 <p> To be able to use the open session-in-view pattern (i.e. work per request),
6690 register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6691 important that you register this filter before any other filter.
6692
6693 For multiple providers, you should register this filter once per provider, inside
6694 a private module for each persist module installed (this must be the same private
6695 module where the specific persist module is itself installed).
6696
6697 <p>
6698 Example configuration:
6699 <pre>{@code
6700  public class MyModule extends ServletModule {
6701    public void configureServlets() {
6702      filter("/*").through(PersistFilter.class);
6703
6704      serve("/index.html").with(MyHtmlServlet.class);
6705      // Etc.
6706    }
6707  }
6708 }</pre>
6709 <p>
6710 This filter is thread safe and allows you to create injectors concurrently
6711 and deploy multiple guice-persist modules within the same injector, or even
6712 multiple injectors with persist modules withing the same JVM or web app.
6713 <p>
6714 This filter requires the Guice Servlet extension.
6715
6716 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6717    </doc>
6718  </class>
6719  <!-- end class com.google.inject.persist.PersistFilter -->
6720  <!-- start class com.google.inject.persist.PersistModule -->
6721  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6722    abstract="true"
6723    static="false" final="false" visibility="public"
6724    deprecated="not deprecated">
6725    <constructor name="PersistModule"
6726      static="false" final="false" visibility="public"
6727      deprecated="not deprecated">
6728    </constructor>
6729    <method name="configure"
6730      abstract="false" native="false" synchronized="false"
6731      static="false" final="true" visibility="protected"
6732      deprecated="not deprecated">
6733    </method>
6734    <method name="configurePersistence"
6735      abstract="true" native="false" synchronized="false"
6736      static="false" final="false" visibility="protected"
6737      deprecated="not deprecated">
6738    </method>
6739    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6740      abstract="true" native="false" synchronized="false"
6741      static="false" final="false" visibility="protected"
6742      deprecated="not deprecated">
6743    </method>
6744    <doc>
6745    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6746 providers.
6747
6748 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6749    </doc>
6750  </class>
6751  <!-- end class com.google.inject.persist.PersistModule -->
6752  <!-- start interface com.google.inject.persist.PersistService -->
6753  <interface name="PersistService"    abstract="true"
6754    static="false" final="false" visibility="public"
6755    deprecated="not deprecated">
6756    <method name="start"
6757      abstract="true" native="false" synchronized="false"
6758      static="false" final="false" visibility="public"
6759      deprecated="not deprecated">
6760      <doc>
6761      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6762 use. For instance, with JPA, it creates an EntityManagerFactory and may
6763 open connection pools. This method must be called by your code prior to
6764 using any guice-persist or JPA artifacts. If already started,
6765 calling this method does nothing, if already stopped, it also does
6766 nothing.]]>
6767      </doc>
6768    </method>
6769    <method name="stop"
6770      abstract="true" native="false" synchronized="false"
6771      static="false" final="false" visibility="public"
6772      deprecated="not deprecated">
6773      <doc>
6774      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6775 closes the {@code EntityManagerFactory}. If already stopped, calling this
6776 method does nothing. If not yet started, it also does nothing.]]>
6777      </doc>
6778    </method>
6779    <doc>
6780    <![CDATA[Persistence provider service. Use this to manage the overall
6781 startup and stop of the persistence module(s).
6782
6783 TODO(dhanji): Integrate with Service API when appropriate.
6784
6785 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6786    </doc>
6787  </interface>
6788  <!-- end interface com.google.inject.persist.PersistService -->
6789  <!-- start class com.google.inject.persist.Transactional -->
6790  <class name="Transactional"    abstract="true"
6791    static="false" final="false" visibility="public"
6792    deprecated="not deprecated">
6793    <implements name="java.lang.annotation.Annotation"/>
6794    <doc>
6795    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6796 Consult the documentation on https://github.com/google/guice/wiki/GuicePersist for detailed
6797 semantics.
6798 Marking a method {@code @Transactional} will start a new transaction before the method
6799 executes and commit it after the method returns.
6800 <p>
6801 If the method throws an exception, the transaction will be rolled back <em>unless</em>
6802 you have specifically requested not to in the {@link #ignore()} clause.
6803 <p>
6804 Similarly, the set of exceptions that will trigger a rollback can be defined in
6805 the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6806 rollback.
6807
6808 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6809    </doc>
6810  </class>
6811  <!-- end class com.google.inject.persist.Transactional -->
6812  <!-- start interface com.google.inject.persist.UnitOfWork -->
6813  <interface name="UnitOfWork"    abstract="true"
6814    static="false" final="false" visibility="public"
6815    deprecated="not deprecated">
6816    <method name="begin"
6817      abstract="true" native="false" synchronized="false"
6818      static="false" final="false" visibility="public"
6819      deprecated="not deprecated">
6820      <doc>
6821      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6822 is already one open, the invocation will do nothing. In this way, you can define arbitrary
6823 units-of-work that nest within one another safely.
6824
6825 Transaction semantics are not affected.]]>
6826      </doc>
6827    </method>
6828    <method name="end"
6829      abstract="true" native="false" synchronized="false"
6830      static="false" final="false" visibility="public"
6831      deprecated="not deprecated">
6832      <doc>
6833      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6834 layer to close. If there is no Unit of work open, then the call returns silently. You can
6835 safely invoke end() repeatedly.
6836 <p>
6837 Transaction semantics are not affected.]]>
6838      </doc>
6839    </method>
6840    <doc>
6841    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6842 work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6843 of work is required. Starting and ending a unit of work directly corresponds to opening and
6844 closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6845 <p> The
6846 Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6847 end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6848 behind thread-locality of Unit of Work semantics).
6849
6850 <ul>
6851   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6852   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6853   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6854       background or bootstrap thread) is probably a good use case.</li>
6855  </ul>
6856
6857 @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6858    </doc>
6859  </interface>
6860  <!-- end interface com.google.inject.persist.UnitOfWork -->
6861</package>
6862<package name="com.google.inject.persist.finder">
6863  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6864  <class name="DynamicFinder" extends="java.lang.Object"
6865    abstract="false"
6866    static="false" final="true" visibility="public"
6867    deprecated="not deprecated">
6868    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6869      static="false" final="false" visibility="public"
6870      deprecated="not deprecated">
6871    </constructor>
6872    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6873      abstract="false" native="false" synchronized="false"
6874      static="true" final="false" visibility="public"
6875      deprecated="not deprecated">
6876      <param name="method" type="java.lang.reflect.Method"/>
6877      <doc>
6878      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6879
6880 @param method a method you want to test as a dynamic finder]]>
6881      </doc>
6882    </method>
6883    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6884      abstract="false" native="false" synchronized="false"
6885      static="false" final="false" visibility="public"
6886      deprecated="not deprecated">
6887    </method>
6888    <doc>
6889    <![CDATA[Utility that helps you introspect dynamic finder methods.
6890
6891 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6892    </doc>
6893  </class>
6894  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6895  <!-- start class com.google.inject.persist.finder.Finder -->
6896  <class name="Finder"    abstract="true"
6897    static="false" final="false" visibility="public"
6898    deprecated="not deprecated">
6899    <implements name="java.lang.annotation.Annotation"/>
6900    <doc>
6901    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6902 specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6903
6904 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6905    </doc>
6906  </class>
6907  <!-- end class com.google.inject.persist.finder.Finder -->
6908  <!-- start class com.google.inject.persist.finder.FirstResult -->
6909  <class name="FirstResult"    abstract="true"
6910    static="false" final="false" visibility="public"
6911    deprecated="not deprecated">
6912    <implements name="java.lang.annotation.Annotation"/>
6913    <doc>
6914    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6915 the index of the first result in the result set you are interested in.
6916 Useful for paging result sets. Complemented by {@link MaxResults}.
6917
6918 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6919    </doc>
6920  </class>
6921  <!-- end class com.google.inject.persist.finder.FirstResult -->
6922  <!-- start class com.google.inject.persist.finder.MaxResults -->
6923  <class name="MaxResults"    abstract="true"
6924    static="false" final="false" visibility="public"
6925    deprecated="not deprecated">
6926    <implements name="java.lang.annotation.Annotation"/>
6927    <doc>
6928    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6929 the maximum size of returned result window. Usefule for paging result sets.
6930 Complement of {@link FirstResult}.
6931
6932 @author Dhanji R. Prasanna (dhanji@gmail.com)]]>
6933    </doc>
6934  </class>
6935  <!-- end class com.google.inject.persist.finder.MaxResults -->
6936</package>
6937<package name="com.google.inject.persist.jpa">
6938  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6939  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6940    abstract="false"
6941    static="false" final="true" visibility="public"
6942    deprecated="not deprecated">
6943    <constructor name="JpaPersistModule" type="java.lang.String"
6944      static="false" final="false" visibility="public"
6945      deprecated="not deprecated">
6946    </constructor>
6947    <method name="configurePersistence"
6948      abstract="false" native="false" synchronized="false"
6949      static="false" final="false" visibility="protected"
6950      deprecated="not deprecated">
6951    </method>
6952    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6953      abstract="false" native="false" synchronized="false"
6954      static="false" final="false" visibility="protected"
6955      deprecated="not deprecated">
6956    </method>
6957    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6958      abstract="false" native="false" synchronized="false"
6959      static="false" final="false" visibility="public"
6960      deprecated="not deprecated">
6961      <param name="properties" type="java.util.Map&lt;?, ?&gt;"/>
6962      <doc>
6963      <![CDATA[Configures the JPA persistence provider with a set of properties.
6964
6965 @param properties A set of name value pairs that configure a JPA persistence
6966     provider as per the specification.
6967 @since 4.0 (since 3.0 with a parameter type of {@code java.util.Properties})]]>
6968      </doc>
6969    </method>
6970    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6971      abstract="false" native="false" synchronized="false"
6972      static="false" final="false" visibility="public"
6973      deprecated="not deprecated">
6974      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6975      <doc>
6976      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6977
6978 @param iface Any interface type whose methods are all dynamic finders.]]>
6979      </doc>
6980    </method>
6981    <doc>
6982    <![CDATA[JPA provider for guice persist.
6983
6984 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
6985    </doc>
6986  </class>
6987  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6988</package>
6989<package name="com.google.inject.servlet">
6990  <!-- start class com.google.inject.servlet.GuiceFilter -->
6991  <class name="GuiceFilter" extends="java.lang.Object"
6992    abstract="false"
6993    static="false" final="false" visibility="public"
6994    deprecated="not deprecated">
6995    <implements name="javax.servlet.Filter"/>
6996    <constructor name="GuiceFilter"
6997      static="false" final="false" visibility="public"
6998      deprecated="not deprecated">
6999    </constructor>
7000    <method name="doFilter"
7001      abstract="false" native="false" synchronized="false"
7002      static="false" final="false" visibility="public"
7003      deprecated="not deprecated">
7004      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
7005      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
7006      <param name="filterChain" type="javax.servlet.FilterChain"/>
7007      <exception name="IOException" type="java.io.IOException"/>
7008      <exception name="ServletException" type="javax.servlet.ServletException"/>
7009    </method>
7010    <method name="init"
7011      abstract="false" native="false" synchronized="false"
7012      static="false" final="false" visibility="public"
7013      deprecated="not deprecated">
7014      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
7015      <exception name="ServletException" type="javax.servlet.ServletException"/>
7016    </method>
7017    <method name="destroy"
7018      abstract="false" native="false" synchronized="false"
7019      static="false" final="false" visibility="public"
7020      deprecated="not deprecated">
7021    </method>
7022    <doc>
7023    <![CDATA[<p>
7024 Apply this filter in web.xml above all other filters (typically), to all requests where you plan
7025  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
7026  and servlets:
7027  <pre>
7028  &lt;filter&gt;
7029    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7030    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
7031  &lt;/filter&gt;
7032
7033  &lt;filter-mapping&gt;
7034    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7035    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
7036  &lt;/filter-mapping&gt;
7037  </pre>
7038
7039 This filter must appear before every filter that makes use of Guice injection or servlet
7040 scopes functionality. Typically, you will only register this filter in web.xml and register
7041 any other filters (and servlets) using a {@link ServletModule}.
7042
7043 @author crazybob@google.com (Bob Lee)
7044 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
7045    </doc>
7046  </class>
7047  <!-- end class com.google.inject.servlet.GuiceFilter -->
7048  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
7049  <class name="GuiceServletContextListener" extends="java.lang.Object"
7050    abstract="true"
7051    static="false" final="false" visibility="public"
7052    deprecated="not deprecated">
7053    <implements name="javax.servlet.ServletContextListener"/>
7054    <constructor name="GuiceServletContextListener"
7055      static="false" final="false" visibility="public"
7056      deprecated="not deprecated">
7057    </constructor>
7058    <method name="contextInitialized"
7059      abstract="false" native="false" synchronized="false"
7060      static="false" final="false" visibility="public"
7061      deprecated="not deprecated">
7062      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7063    </method>
7064    <method name="contextDestroyed"
7065      abstract="false" native="false" synchronized="false"
7066      static="false" final="false" visibility="public"
7067      deprecated="not deprecated">
7068      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7069    </method>
7070    <method name="getInjector" return="com.google.inject.Injector"
7071      abstract="true" native="false" synchronized="false"
7072      static="false" final="false" visibility="protected"
7073      deprecated="not deprecated">
7074      <doc>
7075      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
7076 injector.]]>
7077      </doc>
7078    </method>
7079    <doc>
7080    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
7081 class as a logical place to create and configure your injector. This will ensure the injector
7082 is created when the web application is deployed.
7083
7084 @author Kevin Bourrillion (kevinb@google.com)
7085 @since 2.0]]>
7086    </doc>
7087  </class>
7088  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
7089  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
7090  <interface name="InstanceFilterBinding"    abstract="true"
7091    static="false" final="false" visibility="public"
7092    deprecated="not deprecated">
7093    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7094    <method name="getFilterInstance" return="javax.servlet.Filter"
7095      abstract="true" native="false" synchronized="false"
7096      static="false" final="false" visibility="public"
7097      deprecated="not deprecated">
7098      <doc>
7099      <![CDATA[Returns the filter instance that will be used.]]>
7100      </doc>
7101    </method>
7102    <doc>
7103    <![CDATA[A binding to a single instance of a filter.
7104
7105 @author sameb@google.com
7106 @since 3.0]]>
7107    </doc>
7108  </interface>
7109  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
7110  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
7111  <interface name="InstanceServletBinding"    abstract="true"
7112    static="false" final="false" visibility="public"
7113    deprecated="not deprecated">
7114    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7115    <method name="getServletInstance" return="javax.servlet.http.HttpServlet"
7116      abstract="true" native="false" synchronized="false"
7117      static="false" final="false" visibility="public"
7118      deprecated="not deprecated">
7119      <doc>
7120      <![CDATA[Returns the servlet instance that will be used.]]>
7121      </doc>
7122    </method>
7123    <doc>
7124    <![CDATA[A binding to a single instance of a servlet.
7125
7126 @author sameb@google.com
7127 @since 3.0]]>
7128    </doc>
7129  </interface>
7130  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
7131  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
7132  <interface name="LinkedFilterBinding"    abstract="true"
7133    static="false" final="false" visibility="public"
7134    deprecated="not deprecated">
7135    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7136    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"
7137      abstract="true" native="false" synchronized="false"
7138      static="false" final="false" visibility="public"
7139      deprecated="not deprecated">
7140      <doc>
7141      <![CDATA[Returns the key used to lookup the filter instance.]]>
7142      </doc>
7143    </method>
7144    <doc>
7145    <![CDATA[A linked binding to a filter.
7146
7147 @author sameb@google.com
7148 @since 3.0]]>
7149    </doc>
7150  </interface>
7151  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
7152  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
7153  <interface name="LinkedServletBinding"    abstract="true"
7154    static="false" final="false" visibility="public"
7155    deprecated="not deprecated">
7156    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7157    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"
7158      abstract="true" native="false" synchronized="false"
7159      static="false" final="false" visibility="public"
7160      deprecated="not deprecated">
7161      <doc>
7162      <![CDATA[Returns the key used to lookup the servlet instance.]]>
7163      </doc>
7164    </method>
7165    <doc>
7166    <![CDATA[A linked binding to a servlet.
7167
7168 @author sameb@google.com
7169 @since 3.0]]>
7170    </doc>
7171  </interface>
7172  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
7173  <!-- start class com.google.inject.servlet.RequestParameters -->
7174  <class name="RequestParameters"    abstract="true"
7175    static="false" final="false" visibility="public"
7176    deprecated="not deprecated">
7177    <implements name="java.lang.annotation.Annotation"/>
7178    <doc>
7179    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
7180 when you want the HTTP request parameter map to be injected.
7181
7182 @author crazybob@google.com (Bob Lee)]]>
7183    </doc>
7184  </class>
7185  <!-- end class com.google.inject.servlet.RequestParameters -->
7186  <!-- start class com.google.inject.servlet.RequestScoped -->
7187  <class name="RequestScoped"    abstract="true"
7188    static="false" final="false" visibility="public"
7189    deprecated="not deprecated">
7190    <implements name="java.lang.annotation.Annotation"/>
7191    <doc>
7192    <![CDATA[Apply this to implementation classes when you want one instance per request.
7193
7194 @author crazybob@google.com (Bob Lee)]]>
7195    </doc>
7196  </class>
7197  <!-- end class com.google.inject.servlet.RequestScoped -->
7198  <!-- start interface com.google.inject.servlet.RequestScoper -->
7199  <interface name="RequestScoper"    abstract="true"
7200    static="false" final="false" visibility="public"
7201    deprecated="not deprecated">
7202    <method name="open" return="com.google.inject.servlet.RequestScoper.CloseableScope"
7203      abstract="true" native="false" synchronized="false"
7204      static="false" final="false" visibility="public"
7205      deprecated="not deprecated">
7206      <doc>
7207      <![CDATA[Opens up the request scope until the returned object is closed.
7208 Implementations should ensure (e.g. by blocking) that multiple threads
7209 cannot open the same request scope concurrently. It is allowable to open
7210 the same request scope on the same thread, as long as open/close calls are
7211 correctly nested.]]>
7212      </doc>
7213    </method>
7214    <doc>
7215    <![CDATA[Object that can be used to apply a request scope to a block of code.]]>
7216    </doc>
7217  </interface>
7218  <!-- end interface com.google.inject.servlet.RequestScoper -->
7219  <!-- start interface com.google.inject.servlet.RequestScoper.CloseableScope -->
7220  <interface name="RequestScoper.CloseableScope"    abstract="true"
7221    static="true" final="false" visibility="public"
7222    deprecated="not deprecated">
7223    <implements name="java.io.Closeable"/>
7224    <method name="close"
7225      abstract="true" native="false" synchronized="false"
7226      static="false" final="false" visibility="public"
7227      deprecated="not deprecated">
7228    </method>
7229    <doc>
7230    <![CDATA[Closeable subclass that does not throw any exceptions from close.]]>
7231    </doc>
7232  </interface>
7233  <!-- end interface com.google.inject.servlet.RequestScoper.CloseableScope -->
7234  <!-- start class com.google.inject.servlet.ScopingException -->
7235  <class name="ScopingException" extends="java.lang.IllegalStateException"
7236    abstract="false"
7237    static="false" final="true" visibility="public"
7238    deprecated="not deprecated">
7239    <constructor name="ScopingException" type="java.lang.String"
7240      static="false" final="false" visibility="public"
7241      deprecated="not deprecated">
7242    </constructor>
7243    <doc>
7244    <![CDATA[Exception thrown when there was a failure entering request scope.
7245
7246 @author Chris Nokleberg
7247 @since 4.0]]>
7248    </doc>
7249  </class>
7250  <!-- end class com.google.inject.servlet.ScopingException -->
7251  <!-- start class com.google.inject.servlet.ScopingOnly -->
7252  <class name="ScopingOnly"    abstract="true"
7253    static="false" final="false" visibility="public"
7254    deprecated="not deprecated">
7255    <implements name="java.lang.annotation.Annotation"/>
7256    <doc>
7257    <![CDATA[Annotates a {@link GuiceFilter} that provides scope functionality, but
7258 doesn't dispatch to {@link ServletModule} bound servlets or filters.
7259
7260 @author iqshum@google.com (Isaac Shum)
7261 @since 4.0]]>
7262    </doc>
7263  </class>
7264  <!-- end class com.google.inject.servlet.ScopingOnly -->
7265  <!-- start class com.google.inject.servlet.ServletModule -->
7266  <class name="ServletModule" extends="com.google.inject.AbstractModule"
7267    abstract="false"
7268    static="false" final="false" visibility="public"
7269    deprecated="not deprecated">
7270    <constructor name="ServletModule"
7271      static="false" final="false" visibility="public"
7272      deprecated="not deprecated">
7273    </constructor>
7274    <method name="configure"
7275      abstract="false" native="false" synchronized="false"
7276      static="false" final="true" visibility="protected"
7277      deprecated="not deprecated">
7278    </method>
7279    <method name="configureServlets"
7280      abstract="false" native="false" synchronized="false"
7281      static="false" final="false" visibility="protected"
7282      deprecated="not deprecated">
7283      <doc>
7284      <![CDATA[<h3>Servlet Mapping EDSL</h3>
7285
7286 <p> Part of the EDSL builder language for configuring servlets
7287 and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
7288 Filters and servlets are configured here using simple java method calls. Here is a typical
7289 example of registering a filter when creating your Guice injector:
7290
7291 <pre>
7292   Guice.createInjector(..., new ServletModule() {
7293
7294     {@literal @}Override
7295     protected void configureServlets() {
7296       <b>serve("*.html").with(MyServlet.class)</b>
7297     }
7298   }
7299 </pre>
7300
7301 This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
7302 any web pages ending in {@code .html}. You can also use a path-style syntax to register
7303 servlets:
7304
7305 <pre>
7306       <b>serve("/my/*").with(MyServlet.class)</b>
7307 </pre>
7308
7309 Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
7310 directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
7311 your module. Mapping a servlet that is bound under any other scope is an error.
7312
7313 <p>
7314 <h4>Dispatch Order</h4>
7315 You are free to register as many servlets and filters as you like this way. They will
7316 be compared and dispatched in the order in which the filter methods are called:
7317
7318 <pre>
7319
7320   Guice.createInjector(..., new ServletModule() {
7321
7322     {@literal @}Override
7323     protected void configureServlets() {
7324       filter("/*").through(MyFilter.class);
7325       filter("*.css").through(MyCssFilter.class);
7326       filter("*.jpg").through(new MyJpgFilter());
7327       // etc..
7328
7329       serve("*.html").with(MyServlet.class);
7330       serve("/my/*").with(MyServlet.class);
7331       serve("*.jpg").with(new MyServlet());
7332       // etc..
7333      }
7334    }
7335 </pre>
7336 This will traverse down the list of rules in lexical order. For example, a url
7337  "{@code /my/file.js}" (after it runs through the matching filters) will first
7338  be compared against the servlet mapping:
7339
7340 <pre>
7341       serve("*.html").with(MyServlet.class);
7342 </pre>
7343 And failing that, it will descend to the next servlet mapping:
7344
7345 <pre>
7346       serve("/my/*").with(MyServlet.class);
7347 </pre>
7348
7349 Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
7350 two mapping rules can also be written in more compact form using varargs syntax:
7351
7352 <pre>
7353       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
7354 </pre>
7355
7356 This way you can map several URI patterns to the same servlet. A similar syntax is
7357 also available for filter mappings.
7358
7359 <p>
7360 <h4>Regular Expressions</h4>
7361 You can also map servlets (or filters) to URIs using regular expressions:
7362 <pre>
7363    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
7364 </pre>
7365
7366 This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
7367 <ul>
7368 <li>http://www.google.com/ajax.html</li>
7369 <li>http://www.google.com/content/ajax/index</li>
7370 <li>http://www.google.com/it/is_totally_ajaxian</li>
7371 </ul>
7372
7373
7374 <h3>Initialization Parameters</h3>
7375
7376 Servlets (and filters) allow you to pass in init params
7377 using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
7378 Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
7379 name/value pairs. For example, to initialize {@code MyServlet} with two parameters
7380 ({@code name="Dhanji", site="google.com"}) you could write:
7381
7382 <pre>
7383  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
7384  params.put("name", "Dhanji");
7385  params.put("site", "google.com");
7386
7387  ...
7388      serve("/*").with(MyServlet.class, <b>params</b>)
7389 </pre>
7390
7391 <p>
7392 <h3>Binding Keys</h3>
7393
7394 You can also bind keys rather than classes. This lets you hide
7395 implementations with package-local visbility and expose them using
7396 only a Guice module and an annotation:
7397
7398 <pre>
7399  ...
7400      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
7401 </pre>
7402
7403 Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
7404 custom binding annotation. Elsewhere (in one of your own modules) you can bind this
7405 filter's implementation:
7406
7407 <pre>
7408   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
7409 </pre>
7410
7411 See {@link com.google.inject.Binder} for more information on binding syntax.
7412
7413 <p>
7414 <h3>Multiple Modules</h3>
7415
7416 It is sometimes useful to capture servlet and filter mappings from multiple different
7417 modules. This is essential if you want to package and offer drop-in Guice plugins that
7418 provide servlet functionality.
7419
7420 <p>
7421 Guice Servlet allows you to register several instances of {@code ServletModule} to your
7422 injector. The order in which these modules are installed determines the dispatch order
7423 of filters and the precedence order of servlets. For example, if you had two servlet modules,
7424 {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
7425 to the same URI pattern, {@code "/*"}:
7426
7427 <p>
7428 In {@code RpcModule}:
7429 <pre>
7430     filter("/*").through(RpcFilter.class);
7431 </pre>
7432
7433 In {@code WebServiceModule}:
7434 <pre>
7435     filter("/*").through(WebServiceFilter.class);
7436 </pre>
7437
7438 Then the order in which these filters are dispatched is determined by the order in which
7439 the modules are installed:
7440
7441 <pre>
7442   <b>install(new WebServiceModule());</b>
7443   install(new RpcModule());
7444 </pre>
7445
7446 In the case shown above {@code WebServiceFilter} will run first.
7447
7448 @since 2.0]]>
7449      </doc>
7450    </method>
7451    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7452      abstract="false" native="false" synchronized="false"
7453      static="false" final="true" visibility="protected"
7454      deprecated="not deprecated">
7455      <param name="urlPattern" type="java.lang.String"/>
7456      <param name="morePatterns" type="java.lang.String[]"/>
7457      <doc>
7458      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7459 @since 2.0]]>
7460      </doc>
7461    </method>
7462    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7463      abstract="false" native="false" synchronized="false"
7464      static="false" final="true" visibility="protected"
7465      deprecated="not deprecated">
7466      <param name="urlPatterns" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7467      <doc>
7468      <![CDATA[@param urlPatterns Any Servlet-style patterns. examples: /*, /html/*, *.html, etc.
7469 @since 4.1]]>
7470      </doc>
7471    </method>
7472    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7473      abstract="false" native="false" synchronized="false"
7474      static="false" final="true" visibility="protected"
7475      deprecated="not deprecated">
7476      <param name="regex" type="java.lang.String"/>
7477      <param name="regexes" type="java.lang.String[]"/>
7478      <doc>
7479      <![CDATA[@param regex Any Java-style regular expression.
7480 @since 2.0]]>
7481      </doc>
7482    </method>
7483    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7484      abstract="false" native="false" synchronized="false"
7485      static="false" final="true" visibility="protected"
7486      deprecated="not deprecated">
7487      <param name="regexes" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7488      <doc>
7489      <![CDATA[@param regexes Any Java-style regular expressions.
7490 @since 4.1]]>
7491      </doc>
7492    </method>
7493    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7494      abstract="false" native="false" synchronized="false"
7495      static="false" final="true" visibility="protected"
7496      deprecated="not deprecated">
7497      <param name="urlPattern" type="java.lang.String"/>
7498      <param name="morePatterns" type="java.lang.String[]"/>
7499      <doc>
7500      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7501 @since 2.0]]>
7502      </doc>
7503    </method>
7504    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7505      abstract="false" native="false" synchronized="false"
7506      static="false" final="true" visibility="protected"
7507      deprecated="not deprecated">
7508      <param name="urlPatterns" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7509      <doc>
7510      <![CDATA[@param urlPatterns Any Servlet-style patterns. examples: /*, /html/*, *.html, etc.
7511 @since 4.1]]>
7512      </doc>
7513    </method>
7514    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7515      abstract="false" native="false" synchronized="false"
7516      static="false" final="true" visibility="protected"
7517      deprecated="not deprecated">
7518      <param name="regex" type="java.lang.String"/>
7519      <param name="regexes" type="java.lang.String[]"/>
7520      <doc>
7521      <![CDATA[@param regex Any Java-style regular expression.
7522 @since 2.0]]>
7523      </doc>
7524    </method>
7525    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7526      abstract="false" native="false" synchronized="false"
7527      static="false" final="true" visibility="protected"
7528      deprecated="not deprecated">
7529      <param name="regexes" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7530      <doc>
7531      <![CDATA[@param regexes Any Java-style regular expressions.
7532 @since 4.1]]>
7533      </doc>
7534    </method>
7535    <method name="getServletContext" return="javax.servlet.ServletContext"
7536      abstract="false" native="false" synchronized="false"
7537      static="false" final="true" visibility="protected"
7538      deprecated="not deprecated">
7539      <doc>
7540      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
7541 create your injector. Otherwise, it returns null.
7542 @return The current servlet context.
7543 @since 3.0]]>
7544      </doc>
7545    </method>
7546    <doc>
7547    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
7548 objects so you can inject the request, response, session, etc.
7549
7550 <p>
7551 You should subclass this module to register servlets and
7552 filters in the {@link #configureServlets()} method.
7553
7554 @author crazybob@google.com (Bob Lee)
7555 @author dhanji@gmail.com (Dhanji R. Prasanna)]]>
7556    </doc>
7557  </class>
7558  <!-- end class com.google.inject.servlet.ServletModule -->
7559  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7560  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
7561    static="true" final="false" visibility="public"
7562    deprecated="not deprecated">
7563    <method name="through"
7564      abstract="true" native="false" synchronized="false"
7565      static="false" final="false" visibility="public"
7566      deprecated="not deprecated">
7567      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7568    </method>
7569    <method name="through"
7570      abstract="true" native="false" synchronized="false"
7571      static="false" final="false" visibility="public"
7572      deprecated="not deprecated">
7573      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7574    </method>
7575    <method name="through"
7576      abstract="true" native="false" synchronized="false"
7577      static="false" final="false" visibility="public"
7578      deprecated="not deprecated">
7579      <param name="filter" type="javax.servlet.Filter"/>
7580      <doc>
7581      <![CDATA[@since 3.0]]>
7582      </doc>
7583    </method>
7584    <method name="through"
7585      abstract="true" native="false" synchronized="false"
7586      static="false" final="false" visibility="public"
7587      deprecated="not deprecated">
7588      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7589      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7590    </method>
7591    <method name="through"
7592      abstract="true" native="false" synchronized="false"
7593      static="false" final="false" visibility="public"
7594      deprecated="not deprecated">
7595      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7596      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7597    </method>
7598    <method name="through"
7599      abstract="true" native="false" synchronized="false"
7600      static="false" final="false" visibility="public"
7601      deprecated="not deprecated">
7602      <param name="filter" type="javax.servlet.Filter"/>
7603      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7604      <doc>
7605      <![CDATA[@since 3.0]]>
7606      </doc>
7607    </method>
7608    <doc>
7609    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7610
7611 @since 2.0]]>
7612    </doc>
7613  </interface>
7614  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7615  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7616  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7617    static="true" final="false" visibility="public"
7618    deprecated="not deprecated">
7619    <method name="with"
7620      abstract="true" native="false" synchronized="false"
7621      static="false" final="false" visibility="public"
7622      deprecated="not deprecated">
7623      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7624    </method>
7625    <method name="with"
7626      abstract="true" native="false" synchronized="false"
7627      static="false" final="false" visibility="public"
7628      deprecated="not deprecated">
7629      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7630    </method>
7631    <method name="with"
7632      abstract="true" native="false" synchronized="false"
7633      static="false" final="false" visibility="public"
7634      deprecated="not deprecated">
7635      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7636      <doc>
7637      <![CDATA[@since 3.0]]>
7638      </doc>
7639    </method>
7640    <method name="with"
7641      abstract="true" native="false" synchronized="false"
7642      static="false" final="false" visibility="public"
7643      deprecated="not deprecated">
7644      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7645      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7646    </method>
7647    <method name="with"
7648      abstract="true" native="false" synchronized="false"
7649      static="false" final="false" visibility="public"
7650      deprecated="not deprecated">
7651      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7652      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7653    </method>
7654    <method name="with"
7655      abstract="true" native="false" synchronized="false"
7656      static="false" final="false" visibility="public"
7657      deprecated="not deprecated">
7658      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7659      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7660      <doc>
7661      <![CDATA[@since 3.0]]>
7662      </doc>
7663    </method>
7664    <doc>
7665    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7666
7667 @since 2.0]]>
7668    </doc>
7669  </interface>
7670  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7671  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7672  <interface name="ServletModuleBinding"    abstract="true"
7673    static="false" final="false" visibility="public"
7674    deprecated="not deprecated">
7675    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7676      abstract="true" native="false" synchronized="false"
7677      static="false" final="false" visibility="public"
7678      deprecated="not deprecated">
7679      <doc>
7680      <![CDATA[Returns the pattern type that this binding was created with.]]>
7681      </doc>
7682    </method>
7683    <method name="getPattern" return="java.lang.String"
7684      abstract="true" native="false" synchronized="false"
7685      static="false" final="false" visibility="public"
7686      deprecated="not deprecated">
7687      <doc>
7688      <![CDATA[Returns the pattern used to match against the binding.]]>
7689      </doc>
7690    </method>
7691    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7692      abstract="true" native="false" synchronized="false"
7693      static="false" final="false" visibility="public"
7694      deprecated="not deprecated">
7695      <doc>
7696      <![CDATA[Returns any context params supplied when creating the binding.]]>
7697      </doc>
7698    </method>
7699    <method name="matchesUri" return="boolean"
7700      abstract="true" native="false" synchronized="false"
7701      static="false" final="false" visibility="public"
7702      deprecated="not deprecated">
7703      <param name="uri" type="java.lang.String"/>
7704      <doc>
7705      <![CDATA[Returns true if the given URI will match this binding.]]>
7706      </doc>
7707    </method>
7708    <doc>
7709    <![CDATA[A binding created by {@link ServletModule}.
7710
7711 @author sameb@google.com (Sam Berlin)
7712 @since 3.0]]>
7713    </doc>
7714  </interface>
7715  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7716  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7717  <interface name="ServletModuleTargetVisitor"    abstract="true"
7718    static="false" final="false" visibility="public"
7719    deprecated="not deprecated">
7720    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7721    <method name="visit" return="V"
7722      abstract="true" native="false" synchronized="false"
7723      static="false" final="false" visibility="public"
7724      deprecated="not deprecated">
7725      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7726      <doc>
7727      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7728 {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7729
7730 If multiple patterns were specified, this will be called multiple times.]]>
7731      </doc>
7732    </method>
7733    <method name="visit" return="V"
7734      abstract="true" native="false" synchronized="false"
7735      static="false" final="false" visibility="public"
7736      deprecated="not deprecated">
7737      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7738      <doc>
7739      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7740 {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7741
7742 If multiple patterns were specified, this will be called multiple times.]]>
7743      </doc>
7744    </method>
7745    <method name="visit" return="V"
7746      abstract="true" native="false" synchronized="false"
7747      static="false" final="false" visibility="public"
7748      deprecated="not deprecated">
7749      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7750      <doc>
7751      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7752 {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7753
7754 If multiple patterns were specified, this will be called multiple times.]]>
7755      </doc>
7756    </method>
7757    <method name="visit" return="V"
7758      abstract="true" native="false" synchronized="false"
7759      static="false" final="false" visibility="public"
7760      deprecated="not deprecated">
7761      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7762      <doc>
7763      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7764 {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7765
7766 If multiple patterns were specified, this will be called multiple times.]]>
7767      </doc>
7768    </method>
7769    <doc>
7770    <![CDATA[A visitor for the servlet extension.
7771
7772 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7773 {@link ServletModule} will be visited through this interface.
7774
7775 @since 3.0
7776 @author sameb@google.com (Sam Berlin)]]>
7777    </doc>
7778  </interface>
7779  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7780  <!-- start class com.google.inject.servlet.ServletScopes -->
7781  <class name="ServletScopes" extends="java.lang.Object"
7782    abstract="false"
7783    static="false" final="false" visibility="public"
7784    deprecated="not deprecated">
7785    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7786      abstract="false" native="false" synchronized="false"
7787      static="true" final="false" visibility="public"
7788      deprecated="You probably want to use {@code transferRequest} instead">
7789      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7790      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7791      <doc>
7792      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7793 HTTP request in another thread. This acts as a way of transporting
7794 request context data from the request processing thread to to worker
7795 threads.
7796 <p>
7797 There are some limitations:
7798 <ul>
7799   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7800      transported.</li>
7801   <li>State changes to the HttpServletRequest after this method is called
7802      will not be seen in the continued thread.</li>
7803   <li>Only the HttpServletRequest, ServletContext and request parameter
7804      map are available in the continued thread. The response and session
7805      are not available.</li>
7806 </ul>
7807
7808 <p>The returned callable will throw a {@link ScopingException} when called
7809 if the HTTP request scope is still active on the current thread.
7810
7811 @param callable code to be executed in another thread, which depends on
7812     the request scope.
7813 @param seedMap the initial set of scoped instances for Guice to seed the
7814     request scope with.  To seed a key with null, use {@code null} as
7815     the value.
7816 @return a callable that will invoke the given callable, making the request
7817     context available to it.
7818 @throws OutOfScopeException if this method is called from a non-request
7819     thread, or if the request has completed.
7820
7821 @since 3.0
7822 @deprecated You probably want to use {@code transferRequest} instead]]>
7823      </doc>
7824    </method>
7825    <method name="transferRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7826      abstract="false" native="false" synchronized="false"
7827      static="true" final="false" visibility="public"
7828      deprecated="not deprecated">
7829      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7830      <doc>
7831      <![CDATA[Wraps the given callable in a contextual callable that "transfers" the
7832 request to another thread. This acts as a way of transporting
7833 request context data from the current thread to a future thread.
7834
7835 <p>As opposed to {@link #continueRequest}, this method propagates all
7836 existing scoped objects. The primary use case is in server implementations
7837 where you can detach the request processing thread while waiting for data,
7838 and reattach to a different thread to finish processing at a later time.
7839
7840 <p>Because request-scoped objects are not typically thread-safe, the
7841 callable returned by this method must not be run on a different thread
7842 until the current request scope has terminated. The returned callable will
7843 block until the current thread has released the request scope.
7844
7845 @param callable code to be executed in another thread, which depends on
7846     the request scope.
7847 @return a callable that will invoke the given callable, making the request
7848     context available to it.
7849 @throws OutOfScopeException if this method is called from a non-request
7850     thread, or if the request has completed.
7851 @since 4.0]]>
7852      </doc>
7853    </method>
7854    <method name="transferRequest" return="com.google.inject.servlet.RequestScoper"
7855      abstract="false" native="false" synchronized="false"
7856      static="true" final="false" visibility="public"
7857      deprecated="not deprecated">
7858      <doc>
7859      <![CDATA[Returns an object that "transfers" the request to another thread. This acts
7860 as a way of transporting request context data from the current thread to a
7861 future thread. The transferred scope is the one active for the thread that
7862 calls this method. A later call to {@code open()} activates the transferred
7863 the scope, including propagating any objects scoped at that time.
7864
7865 <p>As opposed to {@link #continueRequest}, this method propagates all
7866 existing scoped objects. The primary use case is in server implementations
7867 where you can detach the request processing thread while waiting for data,
7868 and reattach to a different thread to finish processing at a later time.
7869
7870 <p>Because request-scoped objects are not typically thread-safe, it is
7871 important to avoid applying the same request scope concurrently. The
7872 returned Scoper will block on open until the current thread has released
7873 the request scope.
7874
7875 @return an object that when opened will initiate the request scope
7876 @throws OutOfScopeException if this method is called from a non-request
7877     thread, or if the request has completed.
7878 @since 4.1]]>
7879      </doc>
7880    </method>
7881    <method name="isRequestScoped" return="boolean"
7882      abstract="false" native="false" synchronized="false"
7883      static="true" final="false" visibility="public"
7884      deprecated="not deprecated">
7885      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
7886      <doc>
7887      <![CDATA[Returns true if {@code binding} is request-scoped. If the binding is a
7888 {@link com.google.inject.spi.LinkedKeyBinding linked key binding} and
7889 belongs to an injector (i. e. it was retrieved via
7890 {@link Injector#getBinding Injector.getBinding()}), then this method will
7891 also return true if the target binding is request-scoped.
7892
7893 @since 4.0]]>
7894      </doc>
7895    </method>
7896    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7897      abstract="false" native="false" synchronized="false"
7898      static="true" final="false" visibility="public"
7899      deprecated="not deprecated">
7900      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7901      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7902      <doc>
7903      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7904 as the HTTP request scope, but is used if no HTTP request scope is in
7905 progress. In this way, keys can be scoped as @RequestScoped and exist
7906 in non-HTTP requests (for example: RPC requests) as well as in HTTP
7907 request threads.
7908
7909 <p>The returned callable will throw a {@link ScopingException} when called
7910 if there is a request scope already active on the current thread.
7911
7912 @param callable code to be executed which depends on the request scope.
7913     Typically in another thread, but not necessarily so.
7914 @param seedMap the initial set of scoped instances for Guice to seed the
7915     request scope with.  To seed a key with null, use {@code null} as
7916     the value.
7917 @return a callable that when called will run inside the a request scope
7918     that exposes the instances in the {@code seedMap} as scoped keys.
7919 @since 3.0]]>
7920      </doc>
7921    </method>
7922    <method name="scopeRequest" return="com.google.inject.servlet.RequestScoper"
7923      abstract="false" native="false" synchronized="false"
7924      static="true" final="false" visibility="public"
7925      deprecated="not deprecated">
7926      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7927      <doc>
7928      <![CDATA[Returns an object that will apply request scope to a block of code. This is
7929 not the same as the HTTP request scope, but is used if no HTTP request
7930 scope is in progress. In this way, keys can be scoped as @RequestScoped and
7931 exist in non-HTTP requests (for example: RPC requests) as well as in HTTP
7932 request threads.
7933
7934 <p>The returned object will throw a {@link ScopingException} when opened
7935 if there is a request scope already active on the current thread.
7936
7937 @param seedMap the initial set of scoped instances for Guice to seed the
7938     request scope with.  To seed a key with null, use {@code null} as
7939     the value.
7940 @return an object that when opened will initiate the request scope
7941 @since 4.1]]>
7942      </doc>
7943    </method>
7944    <field name="REQUEST" type="com.google.inject.Scope"
7945      transient="false" volatile="false"
7946      static="true" final="true" visibility="public"
7947      deprecated="not deprecated">
7948      <doc>
7949      <![CDATA[HTTP servlet request scope.]]>
7950      </doc>
7951    </field>
7952    <field name="SESSION" type="com.google.inject.Scope"
7953      transient="false" volatile="false"
7954      static="true" final="true" visibility="public"
7955      deprecated="not deprecated">
7956      <doc>
7957      <![CDATA[HTTP session scope.]]>
7958      </doc>
7959    </field>
7960    <doc>
7961    <![CDATA[Servlet scopes.
7962
7963 @author crazybob@google.com (Bob Lee)]]>
7964    </doc>
7965  </class>
7966  <!-- end class com.google.inject.servlet.ServletScopes -->
7967  <!-- start class com.google.inject.servlet.SessionScoped -->
7968  <class name="SessionScoped"    abstract="true"
7969    static="false" final="false" visibility="public"
7970    deprecated="not deprecated">
7971    <implements name="java.lang.annotation.Annotation"/>
7972    <doc>
7973    <![CDATA[Apply this to implementation classes when you want one instance per session.
7974
7975 @see com.google.inject.Scopes#SINGLETON
7976 @author crazybob@google.com (Bob Lee)]]>
7977    </doc>
7978  </class>
7979  <!-- end class com.google.inject.servlet.SessionScoped -->
7980  <!-- start class com.google.inject.servlet.UriPatternType -->
7981  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7982    abstract="false"
7983    static="false" final="true" visibility="public"
7984    deprecated="not deprecated">
7985    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7986      abstract="false" native="false" synchronized="false"
7987      static="true" final="false" visibility="public"
7988      deprecated="not deprecated">
7989    </method>
7990    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7991      abstract="false" native="false" synchronized="false"
7992      static="true" final="false" visibility="public"
7993      deprecated="not deprecated">
7994      <param name="name" type="java.lang.String"/>
7995    </method>
7996    <doc>
7997    <![CDATA[An enumeration of the available URI-pattern matching styles
7998
7999 @since 3.0]]>
8000    </doc>
8001  </class>
8002  <!-- end class com.google.inject.servlet.UriPatternType -->
8003</package>
8004<package name="com.google.inject.spi">
8005  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
8006  <interface name="BindingScopingVisitor"    abstract="true"
8007    static="false" final="false" visibility="public"
8008    deprecated="not deprecated">
8009    <method name="visitEagerSingleton" return="V"
8010      abstract="true" native="false" synchronized="false"
8011      static="false" final="false" visibility="public"
8012      deprecated="not deprecated">
8013      <doc>
8014      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
8015 injector bindings.]]>
8016      </doc>
8017    </method>
8018    <method name="visitScope" return="V"
8019      abstract="true" native="false" synchronized="false"
8020      static="false" final="false" visibility="public"
8021      deprecated="not deprecated">
8022      <param name="scope" type="com.google.inject.Scope"/>
8023      <doc>
8024      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
8025      </doc>
8026    </method>
8027    <method name="visitScopeAnnotation" return="V"
8028      abstract="true" native="false" synchronized="false"
8029      static="false" final="false" visibility="public"
8030      deprecated="not deprecated">
8031      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8032      <doc>
8033      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
8034 that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
8035 Scope) Binder.bindScope()}.]]>
8036      </doc>
8037    </method>
8038    <method name="visitNoScoping" return="V"
8039      abstract="true" native="false" synchronized="false"
8040      static="false" final="false" visibility="public"
8041      deprecated="not deprecated">
8042      <doc>
8043      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
8044 injector should use scoping annotations to find a scope. On an injector, it indicates that
8045 no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
8046 is linked to a scoped binding.]]>
8047      </doc>
8048    </method>
8049    <doc>
8050    <![CDATA[Visits each of the strategies used to scope an injection.
8051
8052 @param <V> any type to be returned by the visit method. Use {@link Void} with
8053     {@code return null} if no return type is needed.
8054 @since 2.0]]>
8055    </doc>
8056  </interface>
8057  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
8058  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
8059  <interface name="BindingTargetVisitor"    abstract="true"
8060    static="false" final="false" visibility="public"
8061    deprecated="not deprecated">
8062    <method name="visit" return="V"
8063      abstract="true" native="false" synchronized="false"
8064      static="false" final="false" visibility="public"
8065      deprecated="not deprecated">
8066      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8067      <doc>
8068      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
8069 found in both module and injector bindings.]]>
8070      </doc>
8071    </method>
8072    <method name="visit" return="V"
8073      abstract="true" native="false" synchronized="false"
8074      static="false" final="false" visibility="public"
8075      deprecated="not deprecated">
8076      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8077      <doc>
8078      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
8079 injections. This target is found in both module and injector bindings.]]>
8080      </doc>
8081    </method>
8082    <method name="visit" return="V"
8083      abstract="true" native="false" synchronized="false"
8084      static="false" final="false" visibility="public"
8085      deprecated="not deprecated">
8086      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8087      <doc>
8088      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
8089 that provider's {@code get} method is invoked. This target is found in both module and injector
8090 bindings.]]>
8091      </doc>
8092    </method>
8093    <method name="visit" return="V"
8094      abstract="true" native="false" synchronized="false"
8095      static="false" final="false" visibility="public"
8096      deprecated="not deprecated">
8097      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8098      <doc>
8099      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
8100 target is found in both module and injector bindings.]]>
8101      </doc>
8102    </method>
8103    <method name="visit" return="V"
8104      abstract="true" native="false" synchronized="false"
8105      static="false" final="false" visibility="public"
8106      deprecated="not deprecated">
8107      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8108      <doc>
8109      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
8110 found in injector bindings.]]>
8111      </doc>
8112    </method>
8113    <method name="visit" return="V"
8114      abstract="true" native="false" synchronized="false"
8115      static="false" final="false" visibility="public"
8116      deprecated="not deprecated">
8117      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8118      <doc>
8119      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
8120 that the injector should use its implicit binding strategies to resolve injections.]]>
8121      </doc>
8122    </method>
8123    <method name="visit" return="V"
8124      abstract="true" native="false" synchronized="false"
8125      static="false" final="false" visibility="public"
8126      deprecated="not deprecated">
8127      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8128      <doc>
8129      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
8130 {@code constructor}. This target is found only on injector bindings.]]>
8131      </doc>
8132    </method>
8133    <method name="visit" return="V"
8134      abstract="true" native="false" synchronized="false"
8135      static="false" final="false" visibility="public"
8136      deprecated="not deprecated">
8137      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8138      <doc>
8139      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
8140 has the same binding annotation but a different type. This target is found only on injector
8141 bindings.]]>
8142      </doc>
8143    </method>
8144    <method name="visit" return="V"
8145      abstract="true" native="false" synchronized="false"
8146      static="false" final="false" visibility="public"
8147      deprecated="not deprecated">
8148      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8149      <doc>
8150      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
8151 provided type. This target is found only on injector bindings.]]>
8152      </doc>
8153    </method>
8154    <doc>
8155    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
8156
8157 @param <V> any type to be returned by the visit method. Use {@link Void} with
8158     {@code return null} if no return type is needed.
8159 @since 2.0]]>
8160    </doc>
8161  </interface>
8162  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
8163  <!-- start interface com.google.inject.spi.ConstructorBinding -->
8164  <interface name="ConstructorBinding"    abstract="true"
8165    static="false" final="false" visibility="public"
8166    deprecated="not deprecated">
8167    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8168    <implements name="com.google.inject.spi.HasDependencies"/>
8169    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
8170      abstract="true" native="false" synchronized="false"
8171      static="false" final="false" visibility="public"
8172      deprecated="not deprecated">
8173      <doc>
8174      <![CDATA[Gets the constructor this binding injects.]]>
8175      </doc>
8176    </method>
8177    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8178      abstract="true" native="false" synchronized="false"
8179      static="false" final="false" visibility="public"
8180      deprecated="not deprecated">
8181      <doc>
8182      <![CDATA[Returns all instance method and field injection points on {@code type}.
8183
8184 @return a possibly empty set of injection points. The set has a specified iteration order. All
8185      fields are returned and then all methods. Within the fields, supertype fields are returned
8186      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
8187      </doc>
8188    </method>
8189    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
8190      abstract="true" native="false" synchronized="false"
8191      static="false" final="false" visibility="public"
8192      deprecated="not deprecated">
8193      <doc>
8194      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
8195
8196 @return a possibly empty map]]>
8197      </doc>
8198    </method>
8199    <doc>
8200    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
8201 instantiated by invoking the constructor.
8202
8203 @author jessewilson@google.com (Jesse Wilson)
8204 @since 2.0]]>
8205    </doc>
8206  </interface>
8207  <!-- end interface com.google.inject.spi.ConstructorBinding -->
8208  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
8209  <interface name="ConvertedConstantBinding"    abstract="true"
8210    static="false" final="false" visibility="public"
8211    deprecated="not deprecated">
8212    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8213    <implements name="com.google.inject.spi.HasDependencies"/>
8214    <method name="getValue" return="T"
8215      abstract="true" native="false" synchronized="false"
8216      static="false" final="false" visibility="public"
8217      deprecated="not deprecated">
8218      <doc>
8219      <![CDATA[Returns the converted value.]]>
8220      </doc>
8221    </method>
8222    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
8223      abstract="true" native="false" synchronized="false"
8224      static="false" final="false" visibility="public"
8225      deprecated="not deprecated">
8226      <doc>
8227      <![CDATA[Returns the type converter binding used to convert the constant.
8228
8229 @since 3.0]]>
8230      </doc>
8231    </method>
8232    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
8233      abstract="true" native="false" synchronized="false"
8234      static="false" final="false" visibility="public"
8235      deprecated="not deprecated">
8236      <doc>
8237      <![CDATA[Returns the key for the source binding. That binding can be retrieved from an injector using
8238 {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8239      </doc>
8240    </method>
8241    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8242      abstract="true" native="false" synchronized="false"
8243      static="false" final="false" visibility="public"
8244      deprecated="not deprecated">
8245      <doc>
8246      <![CDATA[Returns a singleton set containing only the converted key.]]>
8247      </doc>
8248    </method>
8249    <doc>
8250    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
8251 binding annotation but a different type.
8252
8253 @author jessewilson@google.com (Jesse Wilson)
8254 @since 2.0]]>
8255    </doc>
8256  </interface>
8257  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
8258  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
8259  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
8260    abstract="false"
8261    static="false" final="false" visibility="public"
8262    deprecated="not deprecated">
8263    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
8264    <constructor name="DefaultBindingScopingVisitor"
8265      static="false" final="false" visibility="public"
8266      deprecated="not deprecated">
8267    </constructor>
8268    <method name="visitOther" return="V"
8269      abstract="false" native="false" synchronized="false"
8270      static="false" final="false" visibility="protected"
8271      deprecated="not deprecated">
8272      <doc>
8273      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8274      </doc>
8275    </method>
8276    <method name="visitEagerSingleton" return="V"
8277      abstract="false" native="false" synchronized="false"
8278      static="false" final="false" visibility="public"
8279      deprecated="not deprecated">
8280    </method>
8281    <method name="visitScope" return="V"
8282      abstract="false" native="false" synchronized="false"
8283      static="false" final="false" visibility="public"
8284      deprecated="not deprecated">
8285      <param name="scope" type="com.google.inject.Scope"/>
8286    </method>
8287    <method name="visitScopeAnnotation" return="V"
8288      abstract="false" native="false" synchronized="false"
8289      static="false" final="false" visibility="public"
8290      deprecated="not deprecated">
8291      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8292    </method>
8293    <method name="visitNoScoping" return="V"
8294      abstract="false" native="false" synchronized="false"
8295      static="false" final="false" visibility="public"
8296      deprecated="not deprecated">
8297    </method>
8298    <doc>
8299    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8300 {@link #visitOther()}, returning its result.
8301
8302 @param <V> any type to be returned by the visit method. Use {@link Void} with
8303     {@code return null} if no return type is needed.
8304
8305 @author jessewilson@google.com (Jesse Wilson)
8306 @since 2.0]]>
8307    </doc>
8308  </class>
8309  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
8310  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
8311  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
8312    abstract="true"
8313    static="false" final="false" visibility="public"
8314    deprecated="not deprecated">
8315    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
8316    <constructor name="DefaultBindingTargetVisitor"
8317      static="false" final="false" visibility="public"
8318      deprecated="not deprecated">
8319    </constructor>
8320    <method name="visitOther" return="V"
8321      abstract="false" native="false" synchronized="false"
8322      static="false" final="false" visibility="protected"
8323      deprecated="not deprecated">
8324      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
8325      <doc>
8326      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8327      </doc>
8328    </method>
8329    <method name="visit" return="V"
8330      abstract="false" native="false" synchronized="false"
8331      static="false" final="false" visibility="public"
8332      deprecated="not deprecated">
8333      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8334    </method>
8335    <method name="visit" return="V"
8336      abstract="false" native="false" synchronized="false"
8337      static="false" final="false" visibility="public"
8338      deprecated="not deprecated">
8339      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8340    </method>
8341    <method name="visit" return="V"
8342      abstract="false" native="false" synchronized="false"
8343      static="false" final="false" visibility="public"
8344      deprecated="not deprecated">
8345      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8346    </method>
8347    <method name="visit" return="V"
8348      abstract="false" native="false" synchronized="false"
8349      static="false" final="false" visibility="public"
8350      deprecated="not deprecated">
8351      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8352    </method>
8353    <method name="visit" return="V"
8354      abstract="false" native="false" synchronized="false"
8355      static="false" final="false" visibility="public"
8356      deprecated="not deprecated">
8357      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8358    </method>
8359    <method name="visit" return="V"
8360      abstract="false" native="false" synchronized="false"
8361      static="false" final="false" visibility="public"
8362      deprecated="not deprecated">
8363      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8364    </method>
8365    <method name="visit" return="V"
8366      abstract="false" native="false" synchronized="false"
8367      static="false" final="false" visibility="public"
8368      deprecated="not deprecated">
8369      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8370    </method>
8371    <method name="visit" return="V"
8372      abstract="false" native="false" synchronized="false"
8373      static="false" final="false" visibility="public"
8374      deprecated="not deprecated">
8375      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8376    </method>
8377    <method name="visit" return="V"
8378      abstract="false" native="false" synchronized="false"
8379      static="false" final="false" visibility="public"
8380      deprecated="not deprecated">
8381      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8382    </method>
8383    <doc>
8384    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
8385 #visitOther(Binding)}, returning its result.
8386
8387 @param <V> any type to be returned by the visit method. Use {@link Void} with
8388     {@code return null} if no return type is needed.
8389
8390 @author jessewilson@google.com (Jesse Wilson)
8391 @since 2.0]]>
8392    </doc>
8393  </class>
8394  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
8395  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
8396  <class name="DefaultElementVisitor" extends="java.lang.Object"
8397    abstract="true"
8398    static="false" final="false" visibility="public"
8399    deprecated="not deprecated">
8400    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
8401    <constructor name="DefaultElementVisitor"
8402      static="false" final="false" visibility="public"
8403      deprecated="not deprecated">
8404    </constructor>
8405    <method name="visitOther" return="V"
8406      abstract="false" native="false" synchronized="false"
8407      static="false" final="false" visibility="protected"
8408      deprecated="not deprecated">
8409      <param name="element" type="com.google.inject.spi.Element"/>
8410      <doc>
8411      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8412      </doc>
8413    </method>
8414    <method name="visit" return="V"
8415      abstract="false" native="false" synchronized="false"
8416      static="false" final="false" visibility="public"
8417      deprecated="not deprecated">
8418      <param name="message" type="com.google.inject.spi.Message"/>
8419    </method>
8420    <method name="visit" return="V"
8421      abstract="false" native="false" synchronized="false"
8422      static="false" final="false" visibility="public"
8423      deprecated="not deprecated">
8424      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8425    </method>
8426    <method name="visit" return="V"
8427      abstract="false" native="false" synchronized="false"
8428      static="false" final="false" visibility="public"
8429      deprecated="not deprecated">
8430      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
8431    </method>
8432    <method name="visit" return="V"
8433      abstract="false" native="false" synchronized="false"
8434      static="false" final="false" visibility="public"
8435      deprecated="not deprecated">
8436      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
8437    </method>
8438    <method name="visit" return="V"
8439      abstract="false" native="false" synchronized="false"
8440      static="false" final="false" visibility="public"
8441      deprecated="not deprecated">
8442      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
8443    </method>
8444    <method name="visit" return="V"
8445      abstract="false" native="false" synchronized="false"
8446      static="false" final="false" visibility="public"
8447      deprecated="not deprecated">
8448      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8449    </method>
8450    <method name="visit" return="V"
8451      abstract="false" native="false" synchronized="false"
8452      static="false" final="false" visibility="public"
8453      deprecated="not deprecated">
8454      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8455    </method>
8456    <method name="visit" return="V"
8457      abstract="false" native="false" synchronized="false"
8458      static="false" final="false" visibility="public"
8459      deprecated="not deprecated">
8460      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
8461    </method>
8462    <method name="visit" return="V"
8463      abstract="false" native="false" synchronized="false"
8464      static="false" final="false" visibility="public"
8465      deprecated="not deprecated">
8466      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
8467    </method>
8468    <method name="visit" return="V"
8469      abstract="false" native="false" synchronized="false"
8470      static="false" final="false" visibility="public"
8471      deprecated="not deprecated">
8472      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8473    </method>
8474    <method name="visit" return="V"
8475      abstract="false" native="false" synchronized="false"
8476      static="false" final="false" visibility="public"
8477      deprecated="not deprecated">
8478      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8479    </method>
8480    <method name="visit" return="V"
8481      abstract="false" native="false" synchronized="false"
8482      static="false" final="false" visibility="public"
8483      deprecated="not deprecated">
8484      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8485    </method>
8486    <method name="visit" return="V"
8487      abstract="false" native="false" synchronized="false"
8488      static="false" final="false" visibility="public"
8489      deprecated="not deprecated">
8490      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8491    </method>
8492    <method name="visit" return="V"
8493      abstract="false" native="false" synchronized="false"
8494      static="false" final="false" visibility="public"
8495      deprecated="not deprecated">
8496      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8497    </method>
8498    <method name="visit" return="V"
8499      abstract="false" native="false" synchronized="false"
8500      static="false" final="false" visibility="public"
8501      deprecated="not deprecated">
8502      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8503    </method>
8504    <method name="visit" return="V"
8505      abstract="false" native="false" synchronized="false"
8506      static="false" final="false" visibility="public"
8507      deprecated="not deprecated">
8508      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8509    </method>
8510    <method name="visit" return="V"
8511      abstract="false" native="false" synchronized="false"
8512      static="false" final="false" visibility="public"
8513      deprecated="not deprecated">
8514      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8515    </method>
8516    <doc>
8517    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8518 {@link #visitOther(Element)}, returning its result.
8519
8520 @param <V> any type to be returned by the visit method. Use {@link Void} with
8521     {@code return null} if no return type is needed.
8522
8523 @author sberlin@gmail.com (Sam Berlin)
8524 @since 2.0]]>
8525    </doc>
8526  </class>
8527  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
8528  <!-- start class com.google.inject.spi.Dependency -->
8529  <class name="Dependency" extends="java.lang.Object"
8530    abstract="false"
8531    static="false" final="true" visibility="public"
8532    deprecated="not deprecated">
8533    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
8534      abstract="false" native="false" synchronized="false"
8535      static="true" final="false" visibility="public"
8536      deprecated="not deprecated">
8537      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
8538      <doc>
8539      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
8540 nullable.]]>
8541      </doc>
8542    </method>
8543    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8544      abstract="false" native="false" synchronized="false"
8545      static="true" final="false" visibility="public"
8546      deprecated="not deprecated">
8547      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
8548      <doc>
8549      <![CDATA[Returns the dependencies from the given injection points.]]>
8550      </doc>
8551    </method>
8552    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8553      abstract="false" native="false" synchronized="false"
8554      static="false" final="false" visibility="public"
8555      deprecated="not deprecated">
8556      <doc>
8557      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
8558      </doc>
8559    </method>
8560    <method name="isNullable" return="boolean"
8561      abstract="false" native="false" synchronized="false"
8562      static="false" final="false" visibility="public"
8563      deprecated="not deprecated">
8564      <doc>
8565      <![CDATA[Returns true if null is a legal value for this dependency.]]>
8566      </doc>
8567    </method>
8568    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
8569      abstract="false" native="false" synchronized="false"
8570      static="false" final="false" visibility="public"
8571      deprecated="not deprecated">
8572      <doc>
8573      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
8574 attached to a particular injection point.]]>
8575      </doc>
8576    </method>
8577    <method name="getParameterIndex" return="int"
8578      abstract="false" native="false" synchronized="false"
8579      static="false" final="false" visibility="public"
8580      deprecated="not deprecated">
8581      <doc>
8582      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
8583 this dependency does not belong to a parameter list. Only method and constuctor dependencies
8584 are elements in a parameter list.]]>
8585      </doc>
8586    </method>
8587    <method name="hashCode" return="int"
8588      abstract="false" native="false" synchronized="false"
8589      static="false" final="false" visibility="public"
8590      deprecated="not deprecated">
8591    </method>
8592    <method name="equals" return="boolean"
8593      abstract="false" native="false" synchronized="false"
8594      static="false" final="false" visibility="public"
8595      deprecated="not deprecated">
8596      <param name="o" type="java.lang.Object"/>
8597    </method>
8598    <method name="toString" return="java.lang.String"
8599      abstract="false" native="false" synchronized="false"
8600      static="false" final="false" visibility="public"
8601      deprecated="not deprecated">
8602    </method>
8603    <doc>
8604    <![CDATA[A variable that can be resolved by an injector.
8605
8606 <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
8607 that's attached to a constructor, method or field.
8608
8609 @author crazybob@google.com (Bob Lee)
8610 @author jessewilson@google.com (Jesse Wilson)
8611 @since 2.0]]>
8612    </doc>
8613  </class>
8614  <!-- end class com.google.inject.spi.Dependency -->
8615  <!-- start class com.google.inject.spi.DependencyAndSource -->
8616  <class name="DependencyAndSource" extends="java.lang.Object"
8617    abstract="false"
8618    static="false" final="true" visibility="public"
8619    deprecated="not deprecated">
8620    <constructor name="DependencyAndSource" type="com.google.inject.spi.Dependency&lt;?&gt;, java.lang.Object"
8621      static="false" final="false" visibility="public"
8622      deprecated="not deprecated">
8623    </constructor>
8624    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;?&gt;"
8625      abstract="false" native="false" synchronized="false"
8626      static="false" final="false" visibility="public"
8627      deprecated="not deprecated">
8628      <doc>
8629      <![CDATA[Returns the Dependency, if one exists. For anything that can be referenced
8630 by {@link Injector#getBinding}, a dependency exists. A dependency will not
8631 exist (and this will return null) for types initialized with
8632 {@link Binder#requestInjection} or {@link Injector#injectMembers(Object)},
8633 nor will it exist for objects injected into Providers bound with
8634 LinkedBindingBuilder#toProvider(Provider).]]>
8635      </doc>
8636    </method>
8637    <method name="getBindingSource" return="java.lang.String"
8638      abstract="false" native="false" synchronized="false"
8639      static="false" final="false" visibility="public"
8640      deprecated="not deprecated">
8641      <doc>
8642      <![CDATA[Returns a string describing where this dependency was bound. If the binding
8643 was just-in-time, there is no valid binding source, so this describes the
8644 class in question.]]>
8645      </doc>
8646    </method>
8647    <method name="toString" return="java.lang.String"
8648      abstract="false" native="false" synchronized="false"
8649      static="false" final="false" visibility="public"
8650      deprecated="not deprecated">
8651    </method>
8652    <doc>
8653    <![CDATA[A combination of a {@link Dependency} and the {@link Binding#getSource()
8654 source} where the dependency was bound.
8655
8656 @author sameb@google.com (Sam Berlin)
8657 @since 4.0]]>
8658    </doc>
8659  </class>
8660  <!-- end class com.google.inject.spi.DependencyAndSource -->
8661  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
8662  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
8663    abstract="false"
8664    static="false" final="true" visibility="public"
8665    deprecated="not deprecated">
8666    <implements name="com.google.inject.spi.Element"/>
8667    <method name="getSource" return="java.lang.Object"
8668      abstract="false" native="false" synchronized="false"
8669      static="false" final="false" visibility="public"
8670      deprecated="not deprecated">
8671    </method>
8672    <method name="applyTo"
8673      abstract="false" native="false" synchronized="false"
8674      static="false" final="false" visibility="public"
8675      deprecated="not deprecated">
8676      <param name="binder" type="com.google.inject.Binder"/>
8677    </method>
8678    <method name="acceptVisitor" return="T"
8679      abstract="false" native="false" synchronized="false"
8680      static="false" final="false" visibility="public"
8681      deprecated="not deprecated">
8682      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8683    </method>
8684    <doc>
8685    <![CDATA[A request to disable circular proxies.
8686
8687 @author sameb@google.com (Sam Berlin)
8688 @since 3.0]]>
8689    </doc>
8690  </class>
8691  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
8692  <!-- start interface com.google.inject.spi.Element -->
8693  <interface name="Element"    abstract="true"
8694    static="false" final="false" visibility="public"
8695    deprecated="not deprecated">
8696    <method name="getSource" return="java.lang.Object"
8697      abstract="true" native="false" synchronized="false"
8698      static="false" final="false" visibility="public"
8699      deprecated="not deprecated">
8700      <doc>
8701      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
8702 configured. Used by Guice in the production of descriptive error messages.
8703
8704 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8705 example. Tools should simply call {@code toString()} on the source object if the type is
8706 unfamiliar.]]>
8707      </doc>
8708    </method>
8709    <method name="acceptVisitor" return="T"
8710      abstract="true" native="false" synchronized="false"
8711      static="false" final="false" visibility="public"
8712      deprecated="not deprecated">
8713      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8714      <doc>
8715      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
8716
8717 @param visitor to call back on]]>
8718      </doc>
8719    </method>
8720    <method name="applyTo"
8721      abstract="true" native="false" synchronized="false"
8722      static="false" final="false" visibility="public"
8723      deprecated="not deprecated">
8724      <param name="binder" type="com.google.inject.Binder"/>
8725      <doc>
8726      <![CDATA[Writes this module element to the given binder (optional operation).
8727
8728 @param binder to apply configuration element to
8729 @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
8730     element.]]>
8731      </doc>
8732    </method>
8733    <doc>
8734    <![CDATA[A core component of a module or injector.
8735
8736 <p>The elements of a module can be inspected, validated and rewritten. Use {@link
8737 Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
8738 from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
8739 This can be used for static analysis and generation of Guice modules.
8740
8741 <p>The elements of an injector can be inspected and exercised. Use {@link
8742 com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
8743
8744 @author jessewilson@google.com (Jesse Wilson)
8745 @author crazybob@google.com (Bob Lee)
8746 @since 2.0]]>
8747    </doc>
8748  </interface>
8749  <!-- end interface com.google.inject.spi.Element -->
8750  <!-- start class com.google.inject.spi.Elements -->
8751  <class name="Elements" extends="java.lang.Object"
8752    abstract="false"
8753    static="false" final="true" visibility="public"
8754    deprecated="not deprecated">
8755    <constructor name="Elements"
8756      static="false" final="false" visibility="public"
8757      deprecated="not deprecated">
8758    </constructor>
8759    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8760      abstract="false" native="false" synchronized="false"
8761      static="true" final="false" visibility="public"
8762      deprecated="not deprecated">
8763      <param name="modules" type="com.google.inject.Module[]"/>
8764      <doc>
8765      <![CDATA[Records the elements executed by {@code modules}.]]>
8766      </doc>
8767    </method>
8768    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8769      abstract="false" native="false" synchronized="false"
8770      static="true" final="false" visibility="public"
8771      deprecated="not deprecated">
8772      <param name="stage" type="com.google.inject.Stage"/>
8773      <param name="modules" type="com.google.inject.Module[]"/>
8774      <doc>
8775      <![CDATA[Records the elements executed by {@code modules}.]]>
8776      </doc>
8777    </method>
8778    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8779      abstract="false" native="false" synchronized="false"
8780      static="true" final="false" visibility="public"
8781      deprecated="not deprecated">
8782      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8783      <doc>
8784      <![CDATA[Records the elements executed by {@code modules}.]]>
8785      </doc>
8786    </method>
8787    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8788      abstract="false" native="false" synchronized="false"
8789      static="true" final="false" visibility="public"
8790      deprecated="not deprecated">
8791      <param name="stage" type="com.google.inject.Stage"/>
8792      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8793      <doc>
8794      <![CDATA[Records the elements executed by {@code modules}.]]>
8795      </doc>
8796    </method>
8797    <method name="getModule" return="com.google.inject.Module"
8798      abstract="false" native="false" synchronized="false"
8799      static="true" final="false" visibility="public"
8800      deprecated="not deprecated">
8801      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8802      <doc>
8803      <![CDATA[Returns the module composed of {@code elements}.]]>
8804      </doc>
8805    </method>
8806    <doc>
8807    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8808 Element#applyTo(Binder) rewritten}.
8809
8810 @author jessewilson@google.com (Jesse Wilson)
8811 @since 2.0]]>
8812    </doc>
8813  </class>
8814  <!-- end class com.google.inject.spi.Elements -->
8815  <!-- start class com.google.inject.spi.ElementSource -->
8816  <class name="ElementSource" extends="java.lang.Object"
8817    abstract="false"
8818    static="false" final="true" visibility="public"
8819    deprecated="not deprecated">
8820    <method name="getOriginalElementSource" return="com.google.inject.spi.ElementSource"
8821      abstract="false" native="false" synchronized="false"
8822      static="false" final="false" visibility="public"
8823      deprecated="not deprecated">
8824      <doc>
8825      <![CDATA[Returns the {@link ElementSource} of the element this was created or copied from. If this was
8826 not created or copied from another element, returns {@code null}.]]>
8827      </doc>
8828    </method>
8829    <method name="getDeclaringSource" return="java.lang.Object"
8830      abstract="false" native="false" synchronized="false"
8831      static="false" final="false" visibility="public"
8832      deprecated="not deprecated">
8833      <doc>
8834      <![CDATA[Returns a single location in source code that defines the element. It can be any object
8835 such as {@link java.lang.reflect.Constructor}, {@link java.lang.reflect.Method},
8836 {@link java.lang.reflect.Field}, {@link StackTraceElement}, etc. For
8837 example, if the element is created from a method annotated by {@literal @Provides}, the
8838 declaring source of element would be the method itself.]]>
8839      </doc>
8840    </method>
8841    <method name="getModuleClassNames" return="java.util.List&lt;java.lang.String&gt;"
8842      abstract="false" native="false" synchronized="false"
8843      static="false" final="false" visibility="public"
8844      deprecated="not deprecated">
8845      <doc>
8846      <![CDATA[Returns the class names of modules involved in creating this {@link Element}. The first
8847 element (index 0) is the class name of module that defined the element, and the last element
8848 is the class name of root module.]]>
8849      </doc>
8850    </method>
8851    <method name="getModuleConfigurePositionsInStackTrace" return="java.util.List&lt;java.lang.Integer&gt;"
8852      abstract="false" native="false" synchronized="false"
8853      static="false" final="false" visibility="public"
8854      deprecated="not deprecated">
8855      <doc>
8856      <![CDATA[Returns the position of {@link com.google.inject.Module#configure configure(Binder)} method
8857 call in the {@link #getStackTrace stack trace} for modules that their classes returned by
8858 {@link #getModuleClassNames}. For example, if the stack trace looks like the following:
8859 <p>
8860 {@code
8861  0 - Binder.bind(),
8862  1 - ModuleTwo.configure(),
8863  2 - Binder.install(),
8864  3 - ModuleOne.configure(),
8865  4 - theRest().
8866 }
8867 <p>
8868 1 and 3 are returned.
8869 <p>
8870 In the cases where stack trace is not available (i.e., the stack trace was not collected),
8871 it returns -1 for all module positions.]]>
8872      </doc>
8873    </method>
8874    <method name="getStackTrace" return="java.lang.StackTraceElement[]"
8875      abstract="false" native="false" synchronized="false"
8876      static="false" final="false" visibility="public"
8877      deprecated="not deprecated">
8878      <doc>
8879      <![CDATA[Returns the sequence of method calls that ends at one of {@link com.google.inject.Binder}
8880 {@code bindXXX()} methods and eventually defines the element. Note that
8881 {@link #getStackTrace} lists {@link StackTraceElement StackTraceElements} in reverse
8882 chronological order. The first element (index zero) is the last method call and the last
8883 element is the first method invocation. In the cases where stack trace is not available
8884 (i.e.,the stack trace was not collected), it returns an empty array.]]>
8885      </doc>
8886    </method>
8887    <method name="toString" return="java.lang.String"
8888      abstract="false" native="false" synchronized="false"
8889      static="false" final="false" visibility="public"
8890      deprecated="not deprecated">
8891      <doc>
8892      <![CDATA[Returns {@code getDeclaringSource().toString()} value.]]>
8893      </doc>
8894    </method>
8895    <doc>
8896    <![CDATA[Contains information about where and how an {@link Element element} was
8897 bound.
8898 <p>
8899 The {@link #getDeclaringSource() declaring source} refers to a location in
8900 source code that defines the Guice {@link Element element}. For example, if
8901 the element is created from a method annotated by {@literal @Provides}, the
8902 declaring source of element would be the method itself.
8903 <p>
8904 The {@link #getStackTrace()} refers to the sequence of calls ends at one of
8905 {@link com.google.inject.Binder} {@code bindXXX()} methods and eventually
8906 defines the element. Note that {@link #getStackTrace()} lists
8907 {@link StackTraceElement StackTraceElements} in reverse chronological order.
8908 The first element (index zero) is the last method call and the last element
8909 is the first method invocation. By default, the stack trace is not collected.
8910 The default behavior can be changed by setting the
8911 {@code guice_include_stack_traces} flag value. The value can be either
8912 {@code OFF}, {@code ONLY_FOR_DECLARING_SOURCE} or {@code COMPLETE}. Note that
8913 collecting stack traces for every binding can cause a performance hit when
8914 the injector is created.
8915 <p>
8916 The sequence of class names of {@link com.google.inject.Module modules}
8917 involved in the element creation can be retrieved by
8918 {@link #getModuleClassNames()}. Similar to {@link #getStackTrace()}, the
8919 order is reverse chronological. The first module (index 0) is the module that
8920 installs the {@link Element element}. The last module is the root module.
8921 <p>
8922 In order to support the cases where a Guice {@link Element element} is
8923 created from another Guice {@link Element element} (original) (e.g., by
8924 {@link Element#applyTo}), it also provides a reference to the original
8925 element source ({@link #getOriginalElementSource()}).
8926
8927 @since 4.0]]>
8928    </doc>
8929  </class>
8930  <!-- end class com.google.inject.spi.ElementSource -->
8931  <!-- start interface com.google.inject.spi.ElementVisitor -->
8932  <interface name="ElementVisitor"    abstract="true"
8933    static="false" final="false" visibility="public"
8934    deprecated="not deprecated">
8935    <method name="visit" return="V"
8936      abstract="true" native="false" synchronized="false"
8937      static="false" final="false" visibility="public"
8938      deprecated="not deprecated">
8939      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8940      <doc>
8941      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8942 instances of the type.]]>
8943      </doc>
8944    </method>
8945    <method name="visit" return="V"
8946      abstract="true" native="false" synchronized="false"
8947      static="false" final="false" visibility="public"
8948      deprecated="not deprecated">
8949      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8950      <doc>
8951      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8952      </doc>
8953    </method>
8954    <method name="visit" return="V"
8955      abstract="true" native="false" synchronized="false"
8956      static="false" final="false" visibility="public"
8957      deprecated="not deprecated">
8958      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8959      <doc>
8960      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8961      </doc>
8962    </method>
8963    <method name="visit" return="V"
8964      abstract="true" native="false" synchronized="false"
8965      static="false" final="false" visibility="public"
8966      deprecated="not deprecated">
8967      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8968      <doc>
8969      <![CDATA[Visit a registration of type converters for matching target types.]]>
8970      </doc>
8971    </method>
8972    <method name="visit" return="V"
8973      abstract="true" native="false" synchronized="false"
8974      static="false" final="false" visibility="public"
8975      deprecated="not deprecated">
8976      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8977      <doc>
8978      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8979      </doc>
8980    </method>
8981    <method name="visit" return="V"
8982      abstract="true" native="false" synchronized="false"
8983      static="false" final="false" visibility="public"
8984      deprecated="not deprecated">
8985      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8986      <doc>
8987      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8988      </doc>
8989    </method>
8990    <method name="visit" return="V"
8991      abstract="true" native="false" synchronized="false"
8992      static="false" final="false" visibility="public"
8993      deprecated="not deprecated">
8994      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8995      <doc>
8996      <![CDATA[Visit a lookup of the provider for a type.]]>
8997      </doc>
8998    </method>
8999    <method name="visit" return="V"
9000      abstract="true" native="false" synchronized="false"
9001      static="false" final="false" visibility="public"
9002      deprecated="not deprecated">
9003      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
9004      <doc>
9005      <![CDATA[Visit a lookup of the members injector.]]>
9006      </doc>
9007    </method>
9008    <method name="visit" return="V"
9009      abstract="true" native="false" synchronized="false"
9010      static="false" final="false" visibility="public"
9011      deprecated="not deprecated">
9012      <param name="message" type="com.google.inject.spi.Message"/>
9013      <doc>
9014      <![CDATA[Visit an error message and the context in which it occured.]]>
9015      </doc>
9016    </method>
9017    <method name="visit" return="V"
9018      abstract="true" native="false" synchronized="false"
9019      static="false" final="false" visibility="public"
9020      deprecated="not deprecated">
9021      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
9022      <doc>
9023      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
9024 private binder}.]]>
9025      </doc>
9026    </method>
9027    <method name="visit" return="V"
9028      abstract="true" native="false" synchronized="false"
9029      static="false" final="false" visibility="public"
9030      deprecated="not deprecated">
9031      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
9032      <doc>
9033      <![CDATA[Visit an injectable type listener binding.]]>
9034      </doc>
9035    </method>
9036    <method name="visit" return="V"
9037      abstract="true" native="false" synchronized="false"
9038      static="false" final="false" visibility="public"
9039      deprecated="not deprecated">
9040      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
9041      <doc>
9042      <![CDATA[Visit a provision listener binding.
9043
9044 @since 4.0]]>
9045      </doc>
9046    </method>
9047    <method name="visit" return="V"
9048      abstract="true" native="false" synchronized="false"
9049      static="false" final="false" visibility="public"
9050      deprecated="not deprecated">
9051      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
9052      <doc>
9053      <![CDATA[Visit a require explicit bindings command.
9054
9055 @since 3.0]]>
9056      </doc>
9057    </method>
9058    <method name="visit" return="V"
9059      abstract="true" native="false" synchronized="false"
9060      static="false" final="false" visibility="public"
9061      deprecated="not deprecated">
9062      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
9063      <doc>
9064      <![CDATA[Visit a disable circular proxies command.
9065
9066 @since 3.0]]>
9067      </doc>
9068    </method>
9069    <method name="visit" return="V"
9070      abstract="true" native="false" synchronized="false"
9071      static="false" final="false" visibility="public"
9072      deprecated="not deprecated">
9073      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
9074      <doc>
9075      <![CDATA[Visit a require explicit {@literal @}{@link Inject} command.
9076
9077 @since 4.0]]>
9078      </doc>
9079    </method>
9080    <method name="visit" return="V"
9081      abstract="true" native="false" synchronized="false"
9082      static="false" final="false" visibility="public"
9083      deprecated="not deprecated">
9084      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
9085      <doc>
9086      <![CDATA[Visit a require exact binding annotations command.
9087
9088 @since 4.0]]>
9089      </doc>
9090    </method>
9091    <method name="visit" return="V"
9092      abstract="true" native="false" synchronized="false"
9093      static="false" final="false" visibility="public"
9094      deprecated="not deprecated">
9095      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
9096      <doc>
9097      <![CDATA[Visits a {@link Binder#scanModulesForAnnotatedMethods} command.
9098
9099 @since 4.0]]>
9100      </doc>
9101    </method>
9102    <doc>
9103    <![CDATA[Visit elements.
9104
9105 @param <V> any type to be returned by the visit method. Use {@link Void} with
9106     {@code return null} if no return type is needed.
9107
9108 @since 2.0]]>
9109    </doc>
9110  </interface>
9111  <!-- end interface com.google.inject.spi.ElementVisitor -->
9112  <!-- start interface com.google.inject.spi.ExposedBinding -->
9113  <interface name="ExposedBinding"    abstract="true"
9114    static="false" final="false" visibility="public"
9115    deprecated="not deprecated">
9116    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9117    <implements name="com.google.inject.spi.HasDependencies"/>
9118    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
9119      abstract="true" native="false" synchronized="false"
9120      static="false" final="false" visibility="public"
9121      deprecated="not deprecated">
9122      <doc>
9123      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
9124      </doc>
9125    </method>
9126    <method name="applyTo"
9127      abstract="true" native="false" synchronized="false"
9128      static="false" final="false" visibility="public"
9129      deprecated="not deprecated">
9130      <param name="binder" type="com.google.inject.Binder"/>
9131      <doc>
9132      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
9133      </doc>
9134    </method>
9135    <doc>
9136    <![CDATA[A binding to a key exposed from an enclosed private environment.
9137
9138 @author jessewilson@google.com (Jesse Wilson)
9139 @since 2.0]]>
9140    </doc>
9141  </interface>
9142  <!-- end interface com.google.inject.spi.ExposedBinding -->
9143  <!-- start interface com.google.inject.spi.HasDependencies -->
9144  <interface name="HasDependencies"    abstract="true"
9145    static="false" final="false" visibility="public"
9146    deprecated="not deprecated">
9147    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9148      abstract="true" native="false" synchronized="false"
9149      static="false" final="false" visibility="public"
9150      deprecated="not deprecated">
9151      <doc>
9152      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
9153 known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
9154 included in the returned set.
9155
9156 @return a possibly empty set]]>
9157      </doc>
9158    </method>
9159    <doc>
9160    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
9161 providers} and instances that expose their dependencies explicitly.
9162
9163 @author jessewilson@google.com (Jesse Wilson)
9164 @since 2.0]]>
9165    </doc>
9166  </interface>
9167  <!-- end interface com.google.inject.spi.HasDependencies -->
9168  <!-- start interface com.google.inject.spi.InjectionListener -->
9169  <interface name="InjectionListener"    abstract="true"
9170    static="false" final="false" visibility="public"
9171    deprecated="not deprecated">
9172    <method name="afterInjection"
9173      abstract="true" native="false" synchronized="false"
9174      static="false" final="false" visibility="public"
9175      deprecated="not deprecated">
9176      <param name="injectee" type="I"/>
9177      <doc>
9178      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
9179
9180 @param injectee instance that Guice injected dependencies into]]>
9181      </doc>
9182    </method>
9183    <doc>
9184    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
9185 injections, post-injection initialization, and more.
9186
9187 @author crazybob@google.com (Bob Lee)
9188 @author jessewilson@google.com (Jesse Wilson)
9189 @since 2.0]]>
9190    </doc>
9191  </interface>
9192  <!-- end interface com.google.inject.spi.InjectionListener -->
9193  <!-- start class com.google.inject.spi.InjectionPoint -->
9194  <class name="InjectionPoint" extends="java.lang.Object"
9195    abstract="false"
9196    static="false" final="true" visibility="public"
9197    deprecated="not deprecated">
9198    <method name="getMember" return="java.lang.reflect.Member"
9199      abstract="false" native="false" synchronized="false"
9200      static="false" final="false" visibility="public"
9201      deprecated="not deprecated">
9202      <doc>
9203      <![CDATA[Returns the injected constructor, field, or method.]]>
9204      </doc>
9205    </method>
9206    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9207      abstract="false" native="false" synchronized="false"
9208      static="false" final="false" visibility="public"
9209      deprecated="not deprecated">
9210      <doc>
9211      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
9212 constructor, the dependencies will correspond to that member's parameters. Field injection
9213 points always have a single dependency for the field itself.
9214
9215 @return a possibly-empty list]]>
9216      </doc>
9217    </method>
9218    <method name="isOptional" return="boolean"
9219      abstract="false" native="false" synchronized="false"
9220      static="false" final="false" visibility="public"
9221      deprecated="not deprecated">
9222      <doc>
9223      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
9224 for all required dependencies. Both explicit bindings (as specified in a module), and implicit
9225 bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
9226 constructors etc.) may be used to satisfy optional injection points.]]>
9227      </doc>
9228    </method>
9229    <method name="isToolable" return="boolean"
9230      abstract="false" native="false" synchronized="false"
9231      static="false" final="false" visibility="public"
9232      deprecated="not deprecated">
9233      <doc>
9234      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
9235
9236 @since 3.0]]>
9237      </doc>
9238    </method>
9239    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
9240      abstract="false" native="false" synchronized="false"
9241      static="false" final="false" visibility="public"
9242      deprecated="not deprecated">
9243      <doc>
9244      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
9245 parameterized type, the result will include more type information than the member's {@link
9246 Member#getDeclaringClass() raw declaring class}.
9247
9248 @since 3.0]]>
9249      </doc>
9250    </method>
9251    <method name="equals" return="boolean"
9252      abstract="false" native="false" synchronized="false"
9253      static="false" final="false" visibility="public"
9254      deprecated="not deprecated">
9255      <param name="o" type="java.lang.Object"/>
9256    </method>
9257    <method name="hashCode" return="int"
9258      abstract="false" native="false" synchronized="false"
9259      static="false" final="false" visibility="public"
9260      deprecated="not deprecated">
9261    </method>
9262    <method name="toString" return="java.lang.String"
9263      abstract="false" native="false" synchronized="false"
9264      static="false" final="false" visibility="public"
9265      deprecated="not deprecated">
9266    </method>
9267    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9268      abstract="false" native="false" synchronized="false"
9269      static="true" final="false" visibility="public"
9270      deprecated="not deprecated">
9271      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9272      <doc>
9273      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
9274 constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
9275 type literal.
9276
9277 @param constructor any single constructor present on {@code type}.
9278
9279 @since 3.0]]>
9280      </doc>
9281    </method>
9282    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9283      abstract="false" native="false" synchronized="false"
9284      static="true" final="false" visibility="public"
9285      deprecated="not deprecated">
9286      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9287      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
9288      <doc>
9289      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
9290
9291 @param constructor any single constructor present on {@code type}.
9292 @param type the concrete type that defines {@code constructor}.
9293
9294 @since 3.0]]>
9295      </doc>
9296    </method>
9297    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9298      abstract="false" native="false" synchronized="false"
9299      static="true" final="false" visibility="public"
9300      deprecated="not deprecated">
9301      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9302      <doc>
9303      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9304
9305 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9306     or a no-arguments constructor that is not private.
9307 @throws ConfigurationException if there is no injectable constructor, more than one injectable
9308     constructor, or if parameters of the injectable constructor are malformed, such as a
9309     parameter with multiple binding annotations.]]>
9310      </doc>
9311    </method>
9312    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9313      abstract="false" native="false" synchronized="false"
9314      static="true" final="false" visibility="public"
9315      deprecated="not deprecated">
9316      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9317      <doc>
9318      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9319
9320 @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9321     or a no-arguments constructor that is not private.
9322 @throws ConfigurationException if there is no injectable constructor, more than one injectable
9323     constructor, or if parameters of the injectable constructor are malformed, such as a
9324     parameter with multiple binding annotations.]]>
9325      </doc>
9326    </method>
9327    <method name="forMethod" return="com.google.inject.spi.InjectionPoint"
9328      abstract="false" native="false" synchronized="false"
9329      static="true" final="false" visibility="public"
9330      deprecated="not deprecated">
9331      <param name="method" type="java.lang.reflect.Method"/>
9332      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9333      <doc>
9334      <![CDATA[Returns a new injection point for the specified method of {@code type}.
9335 This is useful for extensions that need to build dependency graphs from
9336 arbitrary methods.
9337
9338 @param method any single method present on {@code type}.
9339 @param type the concrete type that defines {@code method}.
9340
9341 @since 4.0]]>
9342      </doc>
9343    </method>
9344    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9345      abstract="false" native="false" synchronized="false"
9346      static="true" final="false" visibility="public"
9347      deprecated="not deprecated">
9348      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9349      <doc>
9350      <![CDATA[Returns all static method and field injection points on {@code type}.
9351
9352 @return a possibly empty set of injection points. The set has a specified iteration order. All
9353      fields are returned and then all methods. Within the fields, supertype fields are returned
9354      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9355 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9356      a field with multiple binding annotations. The exception's {@link
9357      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9358      of the valid injection points.]]>
9359      </doc>
9360    </method>
9361    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9362      abstract="false" native="false" synchronized="false"
9363      static="true" final="false" visibility="public"
9364      deprecated="not deprecated">
9365      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9366      <doc>
9367      <![CDATA[Returns all static method and field injection points on {@code type}.
9368
9369 @return a possibly empty set of injection points. The set has a specified iteration order. All
9370      fields are returned and then all methods. Within the fields, supertype fields are returned
9371      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9372 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9373      a field with multiple binding annotations. The exception's {@link
9374      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9375      of the valid injection points.]]>
9376      </doc>
9377    </method>
9378    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9379      abstract="false" native="false" synchronized="false"
9380      static="true" final="false" visibility="public"
9381      deprecated="not deprecated">
9382      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9383      <doc>
9384      <![CDATA[Returns all instance method and field injection points on {@code type}.
9385
9386 @return a possibly empty set of injection points. The set has a specified iteration order. All
9387      fields are returned and then all methods. Within the fields, supertype fields are returned
9388      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9389 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9390      a field with multiple binding annotations. The exception's {@link
9391      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9392      of the valid injection points.]]>
9393      </doc>
9394    </method>
9395    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9396      abstract="false" native="false" synchronized="false"
9397      static="true" final="false" visibility="public"
9398      deprecated="not deprecated">
9399      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9400      <doc>
9401      <![CDATA[Returns all instance method and field injection points on {@code type}.
9402
9403 @return a possibly empty set of injection points. The set has a specified iteration order. All
9404      fields are returned and then all methods. Within the fields, supertype fields are returned
9405      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9406 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9407      a field with multiple binding annotations. The exception's {@link
9408      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9409      of the valid injection points.]]>
9410      </doc>
9411    </method>
9412    <doc>
9413    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
9414 {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
9415 omit the annotation.
9416
9417 @author crazybob@google.com (Bob Lee)
9418 @since 2.0]]>
9419    </doc>
9420  </class>
9421  <!-- end class com.google.inject.spi.InjectionPoint -->
9422  <!-- start class com.google.inject.spi.InjectionRequest -->
9423  <class name="InjectionRequest" extends="java.lang.Object"
9424    abstract="false"
9425    static="false" final="true" visibility="public"
9426    deprecated="not deprecated">
9427    <implements name="com.google.inject.spi.Element"/>
9428    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
9429      static="false" final="false" visibility="public"
9430      deprecated="not deprecated">
9431    </constructor>
9432    <method name="getSource" return="java.lang.Object"
9433      abstract="false" native="false" synchronized="false"
9434      static="false" final="false" visibility="public"
9435      deprecated="not deprecated">
9436    </method>
9437    <method name="getInstance" return="T"
9438      abstract="false" native="false" synchronized="false"
9439      static="false" final="false" visibility="public"
9440      deprecated="not deprecated">
9441    </method>
9442    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9443      abstract="false" native="false" synchronized="false"
9444      static="false" final="false" visibility="public"
9445      deprecated="not deprecated">
9446    </method>
9447    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9448      abstract="false" native="false" synchronized="false"
9449      static="false" final="false" visibility="public"
9450      deprecated="not deprecated">
9451      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9452      <doc>
9453      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
9454 this request.
9455
9456 @return a possibly empty set of injection points. The set has a specified iteration order. All
9457      fields are returned and then all methods. Within the fields, supertype fields are returned
9458      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9459 @throws ConfigurationException if there is a malformed injection point on the class of {@code
9460      instance}, such as a field with multiple binding annotations. The exception's {@link
9461      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9462      of the valid injection points.]]>
9463      </doc>
9464    </method>
9465    <method name="acceptVisitor" return="R"
9466      abstract="false" native="false" synchronized="false"
9467      static="false" final="false" visibility="public"
9468      deprecated="not deprecated">
9469      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
9470    </method>
9471    <method name="applyTo"
9472      abstract="false" native="false" synchronized="false"
9473      static="false" final="false" visibility="public"
9474      deprecated="not deprecated">
9475      <param name="binder" type="com.google.inject.Binder"/>
9476    </method>
9477    <doc>
9478    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
9479 explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
9480 requestInjection()} statements:
9481 <pre>
9482     requestInjection(serviceInstance);</pre>
9483
9484 @author mikeward@google.com (Mike Ward)
9485 @since 2.0]]>
9486    </doc>
9487  </class>
9488  <!-- end class com.google.inject.spi.InjectionRequest -->
9489  <!-- start interface com.google.inject.spi.InstanceBinding -->
9490  <interface name="InstanceBinding"    abstract="true"
9491    static="false" final="false" visibility="public"
9492    deprecated="not deprecated">
9493    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9494    <implements name="com.google.inject.spi.HasDependencies"/>
9495    <method name="getInstance" return="T"
9496      abstract="true" native="false" synchronized="false"
9497      static="false" final="false" visibility="public"
9498      deprecated="not deprecated">
9499      <doc>
9500      <![CDATA[Returns the user-supplied instance.]]>
9501      </doc>
9502    </method>
9503    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9504      abstract="true" native="false" synchronized="false"
9505      static="false" final="false" visibility="public"
9506      deprecated="not deprecated">
9507      <doc>
9508      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
9509 time only.
9510
9511 @return a possibly empty set]]>
9512      </doc>
9513    </method>
9514    <doc>
9515    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
9516
9517 @author jessewilson@google.com (Jesse Wilson)
9518 @since 2.0]]>
9519    </doc>
9520  </interface>
9521  <!-- end interface com.google.inject.spi.InstanceBinding -->
9522  <!-- start class com.google.inject.spi.InterceptorBinding -->
9523  <class name="InterceptorBinding" extends="java.lang.Object"
9524    abstract="false"
9525    static="false" final="true" visibility="public"
9526    deprecated="not deprecated">
9527    <implements name="com.google.inject.spi.Element"/>
9528    <method name="getSource" return="java.lang.Object"
9529      abstract="false" native="false" synchronized="false"
9530      static="false" final="false" visibility="public"
9531      deprecated="not deprecated">
9532    </method>
9533    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
9534      abstract="false" native="false" synchronized="false"
9535      static="false" final="false" visibility="public"
9536      deprecated="not deprecated">
9537    </method>
9538    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
9539      abstract="false" native="false" synchronized="false"
9540      static="false" final="false" visibility="public"
9541      deprecated="not deprecated">
9542    </method>
9543    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
9544      abstract="false" native="false" synchronized="false"
9545      static="false" final="false" visibility="public"
9546      deprecated="not deprecated">
9547    </method>
9548    <method name="acceptVisitor" return="T"
9549      abstract="false" native="false" synchronized="false"
9550      static="false" final="false" visibility="public"
9551      deprecated="not deprecated">
9552      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9553    </method>
9554    <method name="applyTo"
9555      abstract="false" native="false" synchronized="false"
9556      static="false" final="false" visibility="public"
9557      deprecated="not deprecated">
9558      <param name="binder" type="com.google.inject.Binder"/>
9559    </method>
9560    <doc>
9561    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
9562 explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
9563 Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
9564 <pre>
9565     bindInterceptor(Matchers.subclassesOf(MyAction.class),
9566         Matchers.annotatedWith(Transactional.class),
9567         new MyTransactionInterceptor());</pre>
9568
9569 or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
9570 org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
9571
9572 @author jessewilson@google.com (Jesse Wilson)
9573 @since 2.0]]>
9574    </doc>
9575  </class>
9576  <!-- end class com.google.inject.spi.InterceptorBinding -->
9577  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
9578  <interface name="LinkedKeyBinding"    abstract="true"
9579    static="false" final="false" visibility="public"
9580    deprecated="not deprecated">
9581    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9582    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
9583      abstract="true" native="false" synchronized="false"
9584      static="false" final="false" visibility="public"
9585      deprecated="not deprecated">
9586      <doc>
9587      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
9588 injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
9589      </doc>
9590    </method>
9591    <doc>
9592    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
9593
9594 @author jessewilson@google.com (Jesse Wilson)
9595 @since 2.0]]>
9596    </doc>
9597  </interface>
9598  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
9599  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
9600  <class name="MembersInjectorLookup" extends="java.lang.Object"
9601    abstract="false"
9602    static="false" final="true" visibility="public"
9603    deprecated="not deprecated">
9604    <implements name="com.google.inject.spi.Element"/>
9605    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
9606      static="false" final="false" visibility="public"
9607      deprecated="not deprecated">
9608    </constructor>
9609    <method name="getSource" return="java.lang.Object"
9610      abstract="false" native="false" synchronized="false"
9611      static="false" final="false" visibility="public"
9612      deprecated="not deprecated">
9613    </method>
9614    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9615      abstract="false" native="false" synchronized="false"
9616      static="false" final="false" visibility="public"
9617      deprecated="not deprecated">
9618      <doc>
9619      <![CDATA[Gets the type containing the members to be injected.]]>
9620      </doc>
9621    </method>
9622    <method name="acceptVisitor" return="T"
9623      abstract="false" native="false" synchronized="false"
9624      static="false" final="false" visibility="public"
9625      deprecated="not deprecated">
9626      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9627    </method>
9628    <method name="initializeDelegate"
9629      abstract="false" native="false" synchronized="false"
9630      static="false" final="false" visibility="public"
9631      deprecated="not deprecated">
9632      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
9633      <doc>
9634      <![CDATA[Sets the actual members injector.
9635
9636 @throws IllegalStateException if the delegate is already set]]>
9637      </doc>
9638    </method>
9639    <method name="applyTo"
9640      abstract="false" native="false" synchronized="false"
9641      static="false" final="false" visibility="public"
9642      deprecated="not deprecated">
9643      <param name="binder" type="com.google.inject.Binder"/>
9644    </method>
9645    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
9646      abstract="false" native="false" synchronized="false"
9647      static="false" final="false" visibility="public"
9648      deprecated="not deprecated">
9649      <doc>
9650      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
9651 The delegate will be initialized when this element is processed, or otherwise used to create
9652 an injector.]]>
9653      </doc>
9654    </method>
9655    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9656      abstract="false" native="false" synchronized="false"
9657      static="false" final="false" visibility="public"
9658      deprecated="not deprecated">
9659      <doc>
9660      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
9661 initialized, which usually happens when the injector is created. The members injector will
9662 throw an {@code IllegalStateException} if you try to use it beforehand.]]>
9663      </doc>
9664    </method>
9665    <doc>
9666    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
9667 {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
9668 <pre>
9669     MembersInjector&lt;PaymentService&gt; membersInjector
9670         = getMembersInjector(PaymentService.class);</pre>
9671
9672 @author crazybob@google.com (Bob Lee)
9673 @since 2.0]]>
9674    </doc>
9675  </class>
9676  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
9677  <!-- start class com.google.inject.spi.Message -->
9678  <class name="Message" extends="java.lang.Object"
9679    abstract="false"
9680    static="false" final="true" visibility="public"
9681    deprecated="not deprecated">
9682    <implements name="java.io.Serializable"/>
9683    <implements name="com.google.inject.spi.Element"/>
9684    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
9685      static="false" final="false" visibility="public"
9686      deprecated="not deprecated">
9687      <doc>
9688      <![CDATA[@since 2.0]]>
9689      </doc>
9690    </constructor>
9691    <constructor name="Message" type="java.lang.String, java.lang.Throwable"
9692      static="false" final="false" visibility="public"
9693      deprecated="not deprecated">
9694      <doc>
9695      <![CDATA[@since 4.0]]>
9696      </doc>
9697    </constructor>
9698    <constructor name="Message" type="java.lang.Object, java.lang.String"
9699      static="false" final="false" visibility="public"
9700      deprecated="not deprecated">
9701    </constructor>
9702    <constructor name="Message" type="java.lang.String"
9703      static="false" final="false" visibility="public"
9704      deprecated="not deprecated">
9705    </constructor>
9706    <method name="getSource" return="java.lang.String"
9707      abstract="false" native="false" synchronized="false"
9708      static="false" final="false" visibility="public"
9709      deprecated="not deprecated">
9710    </method>
9711    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
9712      abstract="false" native="false" synchronized="false"
9713      static="false" final="false" visibility="public"
9714      deprecated="not deprecated">
9715      <doc>
9716      <![CDATA[@since 2.0]]>
9717      </doc>
9718    </method>
9719    <method name="getMessage" return="java.lang.String"
9720      abstract="false" native="false" synchronized="false"
9721      static="false" final="false" visibility="public"
9722      deprecated="not deprecated">
9723      <doc>
9724      <![CDATA[Gets the error message text.]]>
9725      </doc>
9726    </method>
9727    <method name="acceptVisitor" return="T"
9728      abstract="false" native="false" synchronized="false"
9729      static="false" final="false" visibility="public"
9730      deprecated="not deprecated">
9731      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9732      <doc>
9733      <![CDATA[@since 2.0]]>
9734      </doc>
9735    </method>
9736    <method name="getCause" return="java.lang.Throwable"
9737      abstract="false" native="false" synchronized="false"
9738      static="false" final="false" visibility="public"
9739      deprecated="not deprecated">
9740      <doc>
9741      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
9742 message was not caused by a throwable.
9743
9744 @since 2.0]]>
9745      </doc>
9746    </method>
9747    <method name="toString" return="java.lang.String"
9748      abstract="false" native="false" synchronized="false"
9749      static="false" final="false" visibility="public"
9750      deprecated="not deprecated">
9751    </method>
9752    <method name="hashCode" return="int"
9753      abstract="false" native="false" synchronized="false"
9754      static="false" final="false" visibility="public"
9755      deprecated="not deprecated">
9756    </method>
9757    <method name="equals" return="boolean"
9758      abstract="false" native="false" synchronized="false"
9759      static="false" final="false" visibility="public"
9760      deprecated="not deprecated">
9761      <param name="o" type="java.lang.Object"/>
9762    </method>
9763    <method name="applyTo"
9764      abstract="false" native="false" synchronized="false"
9765      static="false" final="false" visibility="public"
9766      deprecated="not deprecated">
9767      <param name="binder" type="com.google.inject.Binder"/>
9768      <doc>
9769      <![CDATA[@since 2.0]]>
9770      </doc>
9771    </method>
9772    <doc>
9773    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
9774 Guice and its extensions. Messages can be created explicitly in a module using {@link
9775 com.google.inject.Binder#addError(Throwable) addError()} statements:
9776 <pre>
9777     try {
9778       bindPropertiesFromFile();
9779     } catch (IOException e) {
9780       addError(e);
9781     }</pre>
9782
9783 @author crazybob@google.com (Bob Lee)]]>
9784    </doc>
9785  </class>
9786  <!-- end class com.google.inject.spi.Message -->
9787  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9788  <class name="ModuleAnnotatedMethodScanner" extends="java.lang.Object"
9789    abstract="true"
9790    static="false" final="false" visibility="public"
9791    deprecated="not deprecated">
9792    <constructor name="ModuleAnnotatedMethodScanner"
9793      static="false" final="false" visibility="public"
9794      deprecated="not deprecated">
9795    </constructor>
9796    <method name="annotationClasses" return="java.util.Set&lt;? extends java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&gt;"
9797      abstract="true" native="false" synchronized="false"
9798      static="false" final="false" visibility="public"
9799      deprecated="not deprecated">
9800      <doc>
9801      <![CDATA[Returns the annotations this should scan for. Every method in the module that has one of these
9802 annotations will create a Provider binding, with the return value of the binding being what's
9803 provided and the parameters of the method being dependencies of the provider.]]>
9804      </doc>
9805    </method>
9806    <method name="prepareMethod" return="com.google.inject.Key&lt;T&gt;"
9807      abstract="true" native="false" synchronized="false"
9808      static="false" final="false" visibility="public"
9809      deprecated="not deprecated">
9810      <param name="binder" type="com.google.inject.Binder"/>
9811      <param name="annotation" type="java.lang.annotation.Annotation"/>
9812      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9813      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
9814      <doc>
9815      <![CDATA[Prepares a method for binding. This {@code key} parameter is the key discovered from looking at
9816 the binding annotation and return value of the method. Implementations can modify the key to
9817 instead bind to another key. For example, Multibinder may want to change
9818 {@code @SetProvides String provideFoo()} to bind into a unique Key within the multibinder
9819 instead of binding {@code String}.
9820
9821 <p>The injection point and annotation are provided in case the implementation wants to set the
9822 key based on the property of the annotation or if any additional preparation is needed for any
9823 of the dependencies. The annotation is guaranteed to be an instance of one the classes returned
9824 by {@link #annotationClasses}.]]>
9825      </doc>
9826    </method>
9827    <doc>
9828    <![CDATA[Allows extensions to scan modules for annotated methods and bind those methods
9829 as providers, similar to {@code @Provides} methods.
9830
9831 @since 4.0]]>
9832    </doc>
9833  </class>
9834  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9835  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9836  <class name="ModuleAnnotatedMethodScannerBinding" extends="java.lang.Object"
9837    abstract="false"
9838    static="false" final="true" visibility="public"
9839    deprecated="not deprecated">
9840    <implements name="com.google.inject.spi.Element"/>
9841    <constructor name="ModuleAnnotatedMethodScannerBinding" type="java.lang.Object, com.google.inject.spi.ModuleAnnotatedMethodScanner"
9842      static="false" final="false" visibility="public"
9843      deprecated="not deprecated">
9844    </constructor>
9845    <method name="getSource" return="java.lang.Object"
9846      abstract="false" native="false" synchronized="false"
9847      static="false" final="false" visibility="public"
9848      deprecated="not deprecated">
9849    </method>
9850    <method name="getScanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
9851      abstract="false" native="false" synchronized="false"
9852      static="false" final="false" visibility="public"
9853      deprecated="not deprecated">
9854    </method>
9855    <method name="acceptVisitor" return="T"
9856      abstract="false" native="false" synchronized="false"
9857      static="false" final="false" visibility="public"
9858      deprecated="not deprecated">
9859      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9860    </method>
9861    <method name="applyTo"
9862      abstract="false" native="false" synchronized="false"
9863      static="false" final="false" visibility="public"
9864      deprecated="not deprecated">
9865      <param name="binder" type="com.google.inject.Binder"/>
9866    </method>
9867    <method name="toString" return="java.lang.String"
9868      abstract="false" native="false" synchronized="false"
9869      static="false" final="false" visibility="public"
9870      deprecated="not deprecated">
9871    </method>
9872    <doc>
9873    <![CDATA[Represents a call to {@link Binder#scanModulesForAnnotatedMethods} in a module.
9874
9875 @author sameb@google.com (Sam Berlin)
9876 @since 4.0]]>
9877    </doc>
9878  </class>
9879  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9880  <!-- start interface com.google.inject.spi.PrivateElements -->
9881  <interface name="PrivateElements"    abstract="true"
9882    static="false" final="false" visibility="public"
9883    deprecated="not deprecated">
9884    <implements name="com.google.inject.spi.Element"/>
9885    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
9886      abstract="true" native="false" synchronized="false"
9887      static="false" final="false" visibility="public"
9888      deprecated="not deprecated">
9889      <doc>
9890      <![CDATA[Returns the configuration information in this private environment.]]>
9891      </doc>
9892    </method>
9893    <method name="getInjector" return="com.google.inject.Injector"
9894      abstract="true" native="false" synchronized="false"
9895      static="false" final="false" visibility="public"
9896      deprecated="not deprecated">
9897      <doc>
9898      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
9899 been used to create an injector.]]>
9900      </doc>
9901    </method>
9902    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
9903      abstract="true" native="false" synchronized="false"
9904      static="false" final="false" visibility="public"
9905      deprecated="not deprecated">
9906      <doc>
9907      <![CDATA[Returns the unique exposed keys for these private elements.]]>
9908      </doc>
9909    </method>
9910    <method name="getExposedSource" return="java.lang.Object"
9911      abstract="true" native="false" synchronized="false"
9912      static="false" final="false" visibility="public"
9913      deprecated="not deprecated">
9914      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
9915      <doc>
9916      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
9917 exposed. Used by Guice in the production of descriptive error messages.
9918
9919 <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
9920 example. Tools should simply call {@code toString()} on the source object if the type is
9921 unfamiliar.
9922
9923 @param key one of the keys exposed by this module.]]>
9924      </doc>
9925    </method>
9926    <doc>
9927    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
9928 default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
9929
9930 @author jessewilson@google.com (Jesse Wilson)
9931 @since 2.0]]>
9932    </doc>
9933  </interface>
9934  <!-- end interface com.google.inject.spi.PrivateElements -->
9935  <!-- start interface com.google.inject.spi.ProviderBinding -->
9936  <interface name="ProviderBinding"    abstract="true"
9937    static="false" final="false" visibility="public"
9938    deprecated="not deprecated">
9939    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9940    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
9941      abstract="true" native="false" synchronized="false"
9942      static="false" final="false" visibility="public"
9943      deprecated="not deprecated">
9944      <doc>
9945      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
9946 can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
9947 Injector.getBinding(providedKey)}]]>
9948      </doc>
9949    </method>
9950    <doc>
9951    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
9952 is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
9953
9954 @author jessewilson@google.com (Jesse Wilson)
9955 @since 2.0]]>
9956    </doc>
9957  </interface>
9958  <!-- end interface com.google.inject.spi.ProviderBinding -->
9959  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
9960  <interface name="ProviderInstanceBinding"    abstract="true"
9961    static="false" final="false" visibility="public"
9962    deprecated="not deprecated">
9963    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9964    <implements name="com.google.inject.spi.HasDependencies"/>
9965    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
9966      abstract="true" native="false" synchronized="false"
9967      static="false" final="false" visibility="public"
9968      deprecated="Use {@link #getUserSuppliedProvider} instead.">
9969      <doc>
9970      <![CDATA[If the user supplied a JSR330 binding, then this will wrap that one. To always return the
9971 user-supplied provider, use {@link #getUserSuppliedProvider}.
9972
9973 @deprecated Use {@link #getUserSuppliedProvider} instead.]]>
9974      </doc>
9975    </method>
9976    <method name="getUserSuppliedProvider" return="javax.inject.Provider&lt;? extends T&gt;"
9977      abstract="true" native="false" synchronized="false"
9978      static="false" final="false" visibility="public"
9979      deprecated="not deprecated">
9980      <doc>
9981      <![CDATA[Returns the user-supplied, unscoped provider.
9982 @since 4.0]]>
9983      </doc>
9984    </method>
9985    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9986      abstract="true" native="false" synchronized="false"
9987      static="false" final="false" visibility="public"
9988      deprecated="not deprecated">
9989      <doc>
9990      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
9991 time only.
9992
9993 @return a possibly empty set]]>
9994      </doc>
9995    </method>
9996    <doc>
9997    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
9998 injections.
9999
10000 @author jessewilson@google.com (Jesse Wilson)
10001 @since 2.0]]>
10002    </doc>
10003  </interface>
10004  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
10005  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
10006  <interface name="ProviderKeyBinding"    abstract="true"
10007    static="false" final="false" visibility="public"
10008    deprecated="not deprecated">
10009    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10010    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
10011      abstract="true" native="false" synchronized="false"
10012      static="false" final="false" visibility="public"
10013      deprecated="not deprecated">
10014      <doc>
10015      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
10016 injector using {@link com.google.inject.Injector#getBinding(Key)
10017 Injector.getBinding(providerKey)}]]>
10018      </doc>
10019    </method>
10020    <doc>
10021    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
10022 provider's {@code get} method is invoked.
10023
10024 @author jessewilson@google.com (Jesse Wilson)
10025 @since 2.0]]>
10026    </doc>
10027  </interface>
10028  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
10029  <!-- start class com.google.inject.spi.ProviderLookup -->
10030  <class name="ProviderLookup" extends="java.lang.Object"
10031    abstract="false"
10032    static="false" final="true" visibility="public"
10033    deprecated="not deprecated">
10034    <implements name="com.google.inject.spi.Element"/>
10035    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
10036      static="false" final="false" visibility="public"
10037      deprecated="not deprecated">
10038    </constructor>
10039    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.spi.Dependency&lt;T&gt;"
10040      static="false" final="false" visibility="public"
10041      deprecated="not deprecated">
10042      <doc>
10043      <![CDATA[@since 4.0]]>
10044      </doc>
10045    </constructor>
10046    <method name="getSource" return="java.lang.Object"
10047      abstract="false" native="false" synchronized="false"
10048      static="false" final="false" visibility="public"
10049      deprecated="not deprecated">
10050    </method>
10051    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10052      abstract="false" native="false" synchronized="false"
10053      static="false" final="false" visibility="public"
10054      deprecated="not deprecated">
10055    </method>
10056    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;T&gt;"
10057      abstract="false" native="false" synchronized="false"
10058      static="false" final="false" visibility="public"
10059      deprecated="not deprecated">
10060      <doc>
10061      <![CDATA[@since 4.0]]>
10062      </doc>
10063    </method>
10064    <method name="acceptVisitor" return="T"
10065      abstract="false" native="false" synchronized="false"
10066      static="false" final="false" visibility="public"
10067      deprecated="not deprecated">
10068      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10069    </method>
10070    <method name="initializeDelegate"
10071      abstract="false" native="false" synchronized="false"
10072      static="false" final="false" visibility="public"
10073      deprecated="not deprecated">
10074      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
10075      <doc>
10076      <![CDATA[Sets the actual provider.
10077
10078 @throws IllegalStateException if the delegate is already set]]>
10079      </doc>
10080    </method>
10081    <method name="applyTo"
10082      abstract="false" native="false" synchronized="false"
10083      static="false" final="false" visibility="public"
10084      deprecated="not deprecated">
10085      <param name="binder" type="com.google.inject.Binder"/>
10086    </method>
10087    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
10088      abstract="false" native="false" synchronized="false"
10089      static="false" final="false" visibility="public"
10090      deprecated="not deprecated">
10091      <doc>
10092      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
10093 will be initialized when this element is processed, or otherwise used to create an injector.]]>
10094      </doc>
10095    </method>
10096    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10097      abstract="false" native="false" synchronized="false"
10098      static="false" final="false" visibility="public"
10099      deprecated="not deprecated">
10100      <doc>
10101      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
10102 which usually happens when the injector is created. The provider will throw an {@code
10103 IllegalStateException} if you try to use it beforehand.]]>
10104      </doc>
10105    </method>
10106    <doc>
10107    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
10108 {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
10109 <pre>
10110     Provider&lt;PaymentService&gt; paymentServiceProvider
10111         = getProvider(PaymentService.class);</pre>
10112
10113 @author jessewilson@google.com (Jesse Wilson)
10114 @since 2.0]]>
10115    </doc>
10116  </class>
10117  <!-- end class com.google.inject.spi.ProviderLookup -->
10118  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
10119  <interface name="ProviderWithDependencies"    abstract="true"
10120    static="false" final="false" visibility="public"
10121    deprecated="not deprecated">
10122    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10123    <implements name="com.google.inject.spi.HasDependencies"/>
10124    <doc>
10125    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
10126 aren't specified in injections, this interface should be used to expose all dependencies.
10127
10128 @since 2.0]]>
10129    </doc>
10130  </interface>
10131  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
10132  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10133  <interface name="ProviderWithExtensionVisitor"    abstract="true"
10134    static="false" final="false" visibility="public"
10135    deprecated="not deprecated">
10136    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10137    <method name="acceptExtensionVisitor" return="V"
10138      abstract="true" native="false" synchronized="false"
10139      static="false" final="false" visibility="public"
10140      deprecated="not deprecated">
10141      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
10142      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
10143      <doc>
10144      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
10145 extension visitor, and if so, visit it using that method. If the visitor is
10146 not an instance of the custom extension visitor, this method <b>MUST</b>
10147 call visitor.visit(binding).
10148 <p>
10149 Due to issues with generics, the type parameters of this method do not
10150 relate to the type of the provider. In practice, the 'B' type will always
10151 be a supertype of 'T'.]]>
10152      </doc>
10153    </method>
10154    <doc>
10155    <![CDATA[A Provider that is part of an extension which supports a custom
10156 BindingTargetVisitor.
10157 <p>
10158 When an extension binds a provider instance, the provider can implement this
10159 interface to allow users using the
10160 {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
10161 custom visitor designed for that extension. A typical implementation within
10162 the extension would look like
10163 <pre>
10164 &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
10165   if(visitor instanceof MyCustomExtensionVisitor) {
10166     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
10167   } else {
10168     return visitor.visit(binding);
10169   }
10170 }</pre>
10171 'MyCustomExtensionVisitor' in the example above would be an interface the
10172 extension provides that users can implement in order to be notified of custom
10173 extension information. These visitor interfaces must extend from
10174 BindingTargetVisitor.
10175
10176 @since 3.0
10177 @author sameb@google.com (Sam Berlin)]]>
10178    </doc>
10179  </interface>
10180  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10181  <!-- start interface com.google.inject.spi.ProvidesMethodBinding -->
10182  <interface name="ProvidesMethodBinding"    abstract="true"
10183    static="false" final="false" visibility="public"
10184    deprecated="not deprecated">
10185    <implements name="com.google.inject.spi.HasDependencies"/>
10186    <method name="getMethod" return="java.lang.reflect.Method"
10187      abstract="true" native="false" synchronized="false"
10188      static="false" final="false" visibility="public"
10189      deprecated="not deprecated">
10190      <doc>
10191      <![CDATA[Returns the method this binding uses.]]>
10192      </doc>
10193    </method>
10194    <method name="getEnclosingInstance" return="java.lang.Object"
10195      abstract="true" native="false" synchronized="false"
10196      static="false" final="false" visibility="public"
10197      deprecated="not deprecated">
10198      <doc>
10199      <![CDATA[Returns the instance of the object the method is defined in.]]>
10200      </doc>
10201    </method>
10202    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10203      abstract="true" native="false" synchronized="false"
10204      static="false" final="false" visibility="public"
10205      deprecated="not deprecated">
10206      <doc>
10207      <![CDATA[Returns the key of the binding.]]>
10208      </doc>
10209    </method>
10210    <method name="getAnnotation" return="java.lang.annotation.Annotation"
10211      abstract="true" native="false" synchronized="false"
10212      static="false" final="false" visibility="public"
10213      deprecated="not deprecated">
10214      <doc>
10215      <![CDATA[Returns the annotation that caused this binding to be created. For {@code @Provides} methods,
10216 this is an instance of the {@code @Provides} annotation. For bindings from
10217 {@link ModuleAnnotatedMethodScanner}, this is the annotation that caused the scanner to produce
10218 the binding.]]>
10219      </doc>
10220    </method>
10221    <doc>
10222    <![CDATA[An {@literal @}{@link Provides} binding or binding produced by a
10223 {@link ModuleAnnotatedMethodScanner}.
10224
10225 @since 4.0
10226 @author sameb@google.com (Sam Berlin)]]>
10227    </doc>
10228  </interface>
10229  <!-- end interface com.google.inject.spi.ProvidesMethodBinding -->
10230  <!-- start interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10231  <interface name="ProvidesMethodTargetVisitor"    abstract="true"
10232    static="false" final="false" visibility="public"
10233    deprecated="not deprecated">
10234    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
10235    <method name="visit" return="V"
10236      abstract="true" native="false" synchronized="false"
10237      static="false" final="false" visibility="public"
10238      deprecated="not deprecated">
10239      <param name="providesMethodBinding" type="com.google.inject.spi.ProvidesMethodBinding&lt;? extends T&gt;"/>
10240      <doc>
10241      <![CDATA[Visits an {@link ProvidesMethodBinding} created with an {@literal @}{@link Provides} method.]]>
10242      </doc>
10243    </method>
10244    <doc>
10245    <![CDATA[A visitor for the {@literal @}{@link Provides} bindings.
10246 <p>
10247 If your {@link BindingTargetVisitor} implements this interface, bindings created by using
10248 {@code @Provides} will be visited through this interface.
10249
10250 @since 4.0
10251 @author sameb@google.com (Sam Berlin)]]>
10252    </doc>
10253  </interface>
10254  <!-- end interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10255  <!-- start interface com.google.inject.spi.ProvisionListener -->
10256  <interface name="ProvisionListener"    abstract="true"
10257    static="false" final="false" visibility="public"
10258    deprecated="not deprecated">
10259    <method name="onProvision"
10260      abstract="true" native="false" synchronized="false"
10261      static="false" final="false" visibility="public"
10262      deprecated="not deprecated">
10263      <param name="provision" type="com.google.inject.spi.ProvisionListener.ProvisionInvocation&lt;T&gt;"/>
10264      <doc>
10265      <![CDATA[Invoked by Guice when an object requires provisioning. Provisioning occurs
10266 when Guice locates and injects the dependencies for a binding. For types
10267 bound to a Provider, provisioning encapsulates the {@link Provider#get}
10268 method. For toInstance or constant bindings, provisioning encapsulates
10269 the injecting of {@literal @}{@code Inject}ed fields or methods.
10270 For other types, provisioning encapsulates the construction of the
10271 object. If a type is bound within a {@link Scope}, provisioning depends on
10272 the scope. Types bound in Singleton scope will only be provisioned once.
10273 Types bound in no scope will be provisioned every time they are injected.
10274 Other scopes define their own behavior for provisioning.
10275 <p>
10276 To perform the provision, call {@link ProvisionInvocation#provision()}.
10277 If you do not explicitly call provision, it will be automatically done after
10278 this method returns.  It is an error to call provision more than once.]]>
10279      </doc>
10280    </method>
10281    <doc>
10282    <![CDATA[Listens for provisioning of objects. Useful for gathering timing information
10283 about provisioning, post-provision initialization, and more.
10284
10285 @author sameb@google.com (Sam Berlin)
10286 @since 4.0]]>
10287    </doc>
10288  </interface>
10289  <!-- end interface com.google.inject.spi.ProvisionListener -->
10290  <!-- start class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10291  <class name="ProvisionListener.ProvisionInvocation" extends="java.lang.Object"
10292    abstract="true"
10293    static="true" final="false" visibility="public"
10294    deprecated="not deprecated">
10295    <constructor name="ProvisionInvocation"
10296      static="false" final="false" visibility="public"
10297      deprecated="not deprecated">
10298    </constructor>
10299    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
10300      abstract="true" native="false" synchronized="false"
10301      static="false" final="false" visibility="public"
10302      deprecated="not deprecated">
10303      <doc>
10304      <![CDATA[Returns the Binding this is provisioning.
10305 <p>
10306 You must not call {@link Provider#get()} on the provider returned by
10307 {@link Binding#getProvider}, otherwise you will get confusing error messages.]]>
10308      </doc>
10309    </method>
10310    <method name="provision" return="T"
10311      abstract="true" native="false" synchronized="false"
10312      static="false" final="false" visibility="public"
10313      deprecated="not deprecated">
10314      <doc>
10315      <![CDATA[Performs the provision, returning the object provisioned.]]>
10316      </doc>
10317    </method>
10318    <method name="getDependencyChain" return="java.util.List&lt;com.google.inject.spi.DependencyAndSource&gt;"
10319      abstract="true" native="false" synchronized="false"
10320      static="false" final="false" visibility="public"
10321      deprecated="not deprecated">
10322      <doc>
10323      <![CDATA[Returns the dependency chain that led to this object being provisioned.]]>
10324      </doc>
10325    </method>
10326    <doc>
10327    <![CDATA[Encapsulates a single act of provisioning.
10328
10329 @since 4.0]]>
10330    </doc>
10331  </class>
10332  <!-- end class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10333  <!-- start class com.google.inject.spi.ProvisionListenerBinding -->
10334  <class name="ProvisionListenerBinding" extends="java.lang.Object"
10335    abstract="false"
10336    static="false" final="true" visibility="public"
10337    deprecated="not deprecated">
10338    <implements name="com.google.inject.spi.Element"/>
10339    <method name="getListeners" return="java.util.List&lt;com.google.inject.spi.ProvisionListener&gt;"
10340      abstract="false" native="false" synchronized="false"
10341      static="false" final="false" visibility="public"
10342      deprecated="not deprecated">
10343      <doc>
10344      <![CDATA[Returns the registered listeners.]]>
10345      </doc>
10346    </method>
10347    <method name="getBindingMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"
10348      abstract="false" native="false" synchronized="false"
10349      static="false" final="false" visibility="public"
10350      deprecated="not deprecated">
10351      <doc>
10352      <![CDATA[Returns the binding matcher which chooses which bindings the listener should be notified of.]]>
10353      </doc>
10354    </method>
10355    <method name="getSource" return="java.lang.Object"
10356      abstract="false" native="false" synchronized="false"
10357      static="false" final="false" visibility="public"
10358      deprecated="not deprecated">
10359    </method>
10360    <method name="acceptVisitor" return="R"
10361      abstract="false" native="false" synchronized="false"
10362      static="false" final="false" visibility="public"
10363      deprecated="not deprecated">
10364      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
10365    </method>
10366    <method name="applyTo"
10367      abstract="false" native="false" synchronized="false"
10368      static="false" final="false" visibility="public"
10369      deprecated="not deprecated">
10370      <param name="binder" type="com.google.inject.Binder"/>
10371    </method>
10372    <doc>
10373    <![CDATA[Binds keys (picked using a Matcher) to a provision listener. Listeners are created explicitly in
10374 a module using {@link Binder#bindListener(Matcher, ProvisionListener...)} statements:
10375
10376 @author sameb@google.com (Sam Berlin)
10377 @since 4.0]]>
10378    </doc>
10379  </class>
10380  <!-- end class com.google.inject.spi.ProvisionListenerBinding -->
10381  <!-- start class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10382  <class name="RequireAtInjectOnConstructorsOption" extends="java.lang.Object"
10383    abstract="false"
10384    static="false" final="true" visibility="public"
10385    deprecated="not deprecated">
10386    <implements name="com.google.inject.spi.Element"/>
10387    <method name="getSource" return="java.lang.Object"
10388      abstract="false" native="false" synchronized="false"
10389      static="false" final="false" visibility="public"
10390      deprecated="not deprecated">
10391    </method>
10392    <method name="applyTo"
10393      abstract="false" native="false" synchronized="false"
10394      static="false" final="false" visibility="public"
10395      deprecated="not deprecated">
10396      <param name="binder" type="com.google.inject.Binder"/>
10397    </method>
10398    <method name="acceptVisitor" return="T"
10399      abstract="false" native="false" synchronized="false"
10400      static="false" final="false" visibility="public"
10401      deprecated="not deprecated">
10402      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10403    </method>
10404    <doc>
10405    <![CDATA[A request to require explicit {@literal @}{@link Inject} annotations on constructors.
10406
10407 @author sameb@google.com (Sam Berlin)
10408 @since 4.0]]>
10409    </doc>
10410  </class>
10411  <!-- end class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10412  <!-- start class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10413  <class name="RequireExactBindingAnnotationsOption" extends="java.lang.Object"
10414    abstract="false"
10415    static="false" final="true" visibility="public"
10416    deprecated="not deprecated">
10417    <implements name="com.google.inject.spi.Element"/>
10418    <method name="getSource" return="java.lang.Object"
10419      abstract="false" native="false" synchronized="false"
10420      static="false" final="false" visibility="public"
10421      deprecated="not deprecated">
10422    </method>
10423    <method name="applyTo"
10424      abstract="false" native="false" synchronized="false"
10425      static="false" final="false" visibility="public"
10426      deprecated="not deprecated">
10427      <param name="binder" type="com.google.inject.Binder"/>
10428    </method>
10429    <method name="acceptVisitor" return="T"
10430      abstract="false" native="false" synchronized="false"
10431      static="false" final="false" visibility="public"
10432      deprecated="not deprecated">
10433      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10434    </method>
10435    <doc>
10436    <![CDATA[A request to require exact binding annotations.
10437
10438 @author sameb@google.com (Sam Berlin)
10439 @since 4.0]]>
10440    </doc>
10441  </class>
10442  <!-- end class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10443  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
10444  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
10445    abstract="false"
10446    static="false" final="true" visibility="public"
10447    deprecated="not deprecated">
10448    <implements name="com.google.inject.spi.Element"/>
10449    <method name="getSource" return="java.lang.Object"
10450      abstract="false" native="false" synchronized="false"
10451      static="false" final="false" visibility="public"
10452      deprecated="not deprecated">
10453    </method>
10454    <method name="applyTo"
10455      abstract="false" native="false" synchronized="false"
10456      static="false" final="false" visibility="public"
10457      deprecated="not deprecated">
10458      <param name="binder" type="com.google.inject.Binder"/>
10459    </method>
10460    <method name="acceptVisitor" return="T"
10461      abstract="false" native="false" synchronized="false"
10462      static="false" final="false" visibility="public"
10463      deprecated="not deprecated">
10464      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10465    </method>
10466    <doc>
10467    <![CDATA[A request to require explicit bindings.
10468
10469 @author sameb@google.com (Sam Berlin)
10470 @since 3.0]]>
10471    </doc>
10472  </class>
10473  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
10474  <!-- start class com.google.inject.spi.ScopeBinding -->
10475  <class name="ScopeBinding" extends="java.lang.Object"
10476    abstract="false"
10477    static="false" final="true" visibility="public"
10478    deprecated="not deprecated">
10479    <implements name="com.google.inject.spi.Element"/>
10480    <method name="getSource" return="java.lang.Object"
10481      abstract="false" native="false" synchronized="false"
10482      static="false" final="false" visibility="public"
10483      deprecated="not deprecated">
10484    </method>
10485    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
10486      abstract="false" native="false" synchronized="false"
10487      static="false" final="false" visibility="public"
10488      deprecated="not deprecated">
10489    </method>
10490    <method name="getScope" return="com.google.inject.Scope"
10491      abstract="false" native="false" synchronized="false"
10492      static="false" final="false" visibility="public"
10493      deprecated="not deprecated">
10494    </method>
10495    <method name="acceptVisitor" return="T"
10496      abstract="false" native="false" synchronized="false"
10497      static="false" final="false" visibility="public"
10498      deprecated="not deprecated">
10499      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10500    </method>
10501    <method name="applyTo"
10502      abstract="false" native="false" synchronized="false"
10503      static="false" final="false" visibility="public"
10504      deprecated="not deprecated">
10505      <param name="binder" type="com.google.inject.Binder"/>
10506    </method>
10507    <doc>
10508    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
10509 explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
10510 statements:
10511 <pre>
10512     Scope recordScope = new RecordScope();
10513     bindScope(RecordScoped.class, new RecordScope());</pre>
10514
10515 @author jessewilson@google.com (Jesse Wilson)
10516 @since 2.0]]>
10517    </doc>
10518  </class>
10519  <!-- end class com.google.inject.spi.ScopeBinding -->
10520  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
10521  <class name="StaticInjectionRequest" extends="java.lang.Object"
10522    abstract="false"
10523    static="false" final="true" visibility="public"
10524    deprecated="not deprecated">
10525    <implements name="com.google.inject.spi.Element"/>
10526    <method name="getSource" return="java.lang.Object"
10527      abstract="false" native="false" synchronized="false"
10528      static="false" final="false" visibility="public"
10529      deprecated="not deprecated">
10530    </method>
10531    <method name="getType" return="java.lang.Class&lt;?&gt;"
10532      abstract="false" native="false" synchronized="false"
10533      static="false" final="false" visibility="public"
10534      deprecated="not deprecated">
10535    </method>
10536    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
10537      abstract="false" native="false" synchronized="false"
10538      static="false" final="false" visibility="public"
10539      deprecated="not deprecated">
10540      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
10541      <doc>
10542      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
10543 request.
10544
10545 @return a possibly empty set of injection points. The set has a specified iteration order. All
10546      fields are returned and then all methods. Within the fields, supertype fields are returned
10547      before subtype fields. Similarly, supertype methods are returned before subtype methods.
10548 @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
10549      a field with multiple binding annotations. The exception's {@link
10550      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
10551      of the valid injection points.]]>
10552      </doc>
10553    </method>
10554    <method name="applyTo"
10555      abstract="false" native="false" synchronized="false"
10556      static="false" final="false" visibility="public"
10557      deprecated="not deprecated">
10558      <param name="binder" type="com.google.inject.Binder"/>
10559    </method>
10560    <method name="acceptVisitor" return="T"
10561      abstract="false" native="false" synchronized="false"
10562      static="false" final="false" visibility="public"
10563      deprecated="not deprecated">
10564      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10565    </method>
10566    <doc>
10567    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
10568 explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
10569 requestStaticInjection()} statements:
10570 <pre>
10571     requestStaticInjection(MyLegacyService.class);</pre>
10572
10573 @author jessewilson@google.com (Jesse Wilson)
10574 @since 2.0]]>
10575    </doc>
10576  </class>
10577  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
10578  <!-- start class com.google.inject.spi.Toolable -->
10579  <class name="Toolable"    abstract="true"
10580    static="false" final="false" visibility="public"
10581    deprecated="not deprecated">
10582    <implements name="java.lang.annotation.Annotation"/>
10583    <doc>
10584    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
10585 This is typically useful for for extensions to Guice that perform additional validation in an
10586 injected method or field.  This only applies to objects that are already constructed when
10587 bindings are created (ie., something bound using {@link
10588 com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
10589 com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
10590 com.google.inject.Binder#requestInjection requestInjection}.
10591
10592 @author sberlin@gmail.com (Sam Berlin)
10593 @since 3.0]]>
10594    </doc>
10595  </class>
10596  <!-- end class com.google.inject.spi.Toolable -->
10597  <!-- start interface com.google.inject.spi.TypeConverter -->
10598  <interface name="TypeConverter"    abstract="true"
10599    static="false" final="false" visibility="public"
10600    deprecated="not deprecated">
10601    <method name="convert" return="java.lang.Object"
10602      abstract="true" native="false" synchronized="false"
10603      static="false" final="false" visibility="public"
10604      deprecated="not deprecated">
10605      <param name="value" type="java.lang.String"/>
10606      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
10607      <doc>
10608      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
10609      </doc>
10610    </method>
10611    <doc>
10612    <![CDATA[Converts constant string values to a different type.
10613
10614 @author crazybob@google.com (Bob Lee)
10615 @since 2.0]]>
10616    </doc>
10617  </interface>
10618  <!-- end interface com.google.inject.spi.TypeConverter -->
10619  <!-- start class com.google.inject.spi.TypeConverterBinding -->
10620  <class name="TypeConverterBinding" extends="java.lang.Object"
10621    abstract="false"
10622    static="false" final="true" visibility="public"
10623    deprecated="not deprecated">
10624    <implements name="com.google.inject.spi.Element"/>
10625    <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"
10626      static="false" final="false" visibility="public"
10627      deprecated="not deprecated">
10628      <doc>
10629      <![CDATA[@since 3.0]]>
10630      </doc>
10631    </constructor>
10632    <method name="getSource" return="java.lang.Object"
10633      abstract="false" native="false" synchronized="false"
10634      static="false" final="false" visibility="public"
10635      deprecated="not deprecated">
10636    </method>
10637    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10638      abstract="false" native="false" synchronized="false"
10639      static="false" final="false" visibility="public"
10640      deprecated="not deprecated">
10641    </method>
10642    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
10643      abstract="false" native="false" synchronized="false"
10644      static="false" final="false" visibility="public"
10645      deprecated="not deprecated">
10646    </method>
10647    <method name="acceptVisitor" return="T"
10648      abstract="false" native="false" synchronized="false"
10649      static="false" final="false" visibility="public"
10650      deprecated="not deprecated">
10651      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10652    </method>
10653    <method name="applyTo"
10654      abstract="false" native="false" synchronized="false"
10655      static="false" final="false" visibility="public"
10656      deprecated="not deprecated">
10657      <param name="binder" type="com.google.inject.Binder"/>
10658    </method>
10659    <method name="toString" return="java.lang.String"
10660      abstract="false" native="false" synchronized="false"
10661      static="false" final="false" visibility="public"
10662      deprecated="not deprecated">
10663    </method>
10664    <doc>
10665    <![CDATA[Registration of type converters for matching target types. Instances are created
10666 explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
10667 TypeConverter) convertToTypes()} statements:
10668 <pre>
10669     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
10670
10671 @author jessewilson@google.com (Jesse Wilson)
10672 @since 2.0]]>
10673    </doc>
10674  </class>
10675  <!-- end class com.google.inject.spi.TypeConverterBinding -->
10676  <!-- start interface com.google.inject.spi.TypeEncounter -->
10677  <interface name="TypeEncounter"    abstract="true"
10678    static="false" final="false" visibility="public"
10679    deprecated="not deprecated">
10680    <method name="addError"
10681      abstract="true" native="false" synchronized="false"
10682      static="false" final="false" visibility="public"
10683      deprecated="not deprecated">
10684      <param name="message" type="java.lang.String"/>
10685      <param name="arguments" type="java.lang.Object[]"/>
10686      <doc>
10687      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
10688 time. Unlike throwing an exception, this enable us to continue configuring the Injector and
10689 discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
10690 into the message.]]>
10691      </doc>
10692    </method>
10693    <method name="addError"
10694      abstract="true" native="false" synchronized="false"
10695      static="false" final="false" visibility="public"
10696      deprecated="not deprecated">
10697      <param name="t" type="java.lang.Throwable"/>
10698      <doc>
10699      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
10700 message of which will be presented to the user at a later time. If your type listener calls
10701 something that you worry may fail, you should catch the exception and pass it to this method.]]>
10702      </doc>
10703    </method>
10704    <method name="addError"
10705      abstract="true" native="false" synchronized="false"
10706      static="false" final="false" visibility="public"
10707      deprecated="not deprecated">
10708      <param name="message" type="com.google.inject.spi.Message"/>
10709      <doc>
10710      <![CDATA[Records an error message to be presented to the user at a later time.]]>
10711      </doc>
10712    </method>
10713    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10714      abstract="true" native="false" synchronized="false"
10715      static="false" final="false" visibility="public"
10716      deprecated="not deprecated">
10717      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
10718      <doc>
10719      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
10720 provider will not be valid until the injector has been created. The provider will throw an
10721 {@code IllegalStateException} if you try to use it beforehand.]]>
10722      </doc>
10723    </method>
10724    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10725      abstract="true" native="false" synchronized="false"
10726      static="false" final="false" visibility="public"
10727      deprecated="not deprecated">
10728      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10729      <doc>
10730      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
10731 provider will not be valid until the injector has been created. The provider will throw an
10732 {@code IllegalStateException} if you try to use it beforehand.]]>
10733      </doc>
10734    </method>
10735    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10736      abstract="true" native="false" synchronized="false"
10737      static="false" final="false" visibility="public"
10738      deprecated="not deprecated">
10739      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
10740      <doc>
10741      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10742 of the given type {@code T}. The returned members injector will not be valid until the main
10743 injector has been created. The members injector will throw an {@code IllegalStateException}
10744 if you try to use it beforehand.
10745
10746 @param typeLiteral type to get members injector for]]>
10747      </doc>
10748    </method>
10749    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10750      abstract="true" native="false" synchronized="false"
10751      static="false" final="false" visibility="public"
10752      deprecated="not deprecated">
10753      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10754      <doc>
10755      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10756 of the given type {@code T}. The returned members injector will not be valid until the main
10757 injector has been created. The members injector will throw an {@code IllegalStateException}
10758 if you try to use it beforehand.
10759
10760 @param type type to get members injector for]]>
10761      </doc>
10762    </method>
10763    <method name="register"
10764      abstract="true" native="false" synchronized="false"
10765      static="false" final="false" visibility="public"
10766      deprecated="not deprecated">
10767      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
10768      <doc>
10769      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
10770 performed its own injections on an instance of {@code I}.]]>
10771      </doc>
10772    </method>
10773    <method name="register"
10774      abstract="true" native="false" synchronized="false"
10775      static="false" final="false" visibility="public"
10776      deprecated="not deprecated">
10777      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
10778      <doc>
10779      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
10780 injections have been performed on an instance of {@code I}.]]>
10781      </doc>
10782    </method>
10783    <method name="bindInterceptor"
10784      abstract="true" native="false" synchronized="false"
10785      static="false" final="false" visibility="public"
10786      deprecated="not deprecated">
10787      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
10788      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
10789      <doc>
10790      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
10791 method is eligible for interception if:
10792
10793 <ul>
10794  <li>Guice created the instance the method is on</li>
10795  <li>Neither the enclosing type nor the method is final</li>
10796  <li>And the method is package-private or more accessible</li>
10797 </ul>
10798
10799 @param methodMatcher matches methods the interceptor should apply to. For
10800     example: {@code annotatedWith(Transactional.class)}.
10801 @param interceptors to bind]]>
10802      </doc>
10803    </method>
10804    <doc>
10805    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
10806 listeners and binding method interceptors for injectable type {@code I}. It is an error to use
10807 an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
10808 returned.
10809
10810 @param <I> the injectable type encountered
10811 @since 2.0]]>
10812    </doc>
10813  </interface>
10814  <!-- end interface com.google.inject.spi.TypeEncounter -->
10815  <!-- start interface com.google.inject.spi.TypeListener -->
10816  <interface name="TypeListener"    abstract="true"
10817    static="false" final="false" visibility="public"
10818    deprecated="not deprecated">
10819    <method name="hear"
10820      abstract="true" native="false" synchronized="false"
10821      static="false" final="false" visibility="public"
10822      deprecated="not deprecated">
10823      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
10824      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
10825      <doc>
10826      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
10827 Called during injector creation (or afterwards if Guice encounters a type at run time and
10828 creates a JIT binding).
10829
10830 @param type encountered by Guice
10831 @param encounter context of this encounter, enables reporting errors, registering injection
10832     listeners and binding method interceptors for {@code type}.
10833
10834 @param <I> the injectable type]]>
10835      </doc>
10836    </method>
10837    <doc>
10838    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
10839 one situation but only its methods and fields injected in another, Guice will notify this
10840 listener once.
10841
10842 <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
10843 registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
10844 com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
10845 binding method interceptors}.
10846
10847 @since 2.0]]>
10848    </doc>
10849  </interface>
10850  <!-- end interface com.google.inject.spi.TypeListener -->
10851  <!-- start class com.google.inject.spi.TypeListenerBinding -->
10852  <class name="TypeListenerBinding" extends="java.lang.Object"
10853    abstract="false"
10854    static="false" final="true" visibility="public"
10855    deprecated="not deprecated">
10856    <implements name="com.google.inject.spi.Element"/>
10857    <method name="getListener" return="com.google.inject.spi.TypeListener"
10858      abstract="false" native="false" synchronized="false"
10859      static="false" final="false" visibility="public"
10860      deprecated="not deprecated">
10861      <doc>
10862      <![CDATA[Returns the registered listener.]]>
10863      </doc>
10864    </method>
10865    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10866      abstract="false" native="false" synchronized="false"
10867      static="false" final="false" visibility="public"
10868      deprecated="not deprecated">
10869      <doc>
10870      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
10871      </doc>
10872    </method>
10873    <method name="getSource" return="java.lang.Object"
10874      abstract="false" native="false" synchronized="false"
10875      static="false" final="false" visibility="public"
10876      deprecated="not deprecated">
10877    </method>
10878    <method name="acceptVisitor" return="T"
10879      abstract="false" native="false" synchronized="false"
10880      static="false" final="false" visibility="public"
10881      deprecated="not deprecated">
10882      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10883    </method>
10884    <method name="applyTo"
10885      abstract="false" native="false" synchronized="false"
10886      static="false" final="false" visibility="public"
10887      deprecated="not deprecated">
10888      <param name="binder" type="com.google.inject.Binder"/>
10889    </method>
10890    <doc>
10891    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
10892 a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
10893
10894 <pre>
10895     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
10896
10897 @author jessewilson@google.com (Jesse Wilson)
10898 @since 2.0]]>
10899    </doc>
10900  </class>
10901  <!-- end class com.google.inject.spi.TypeListenerBinding -->
10902  <!-- start interface com.google.inject.spi.UntargettedBinding -->
10903  <interface name="UntargettedBinding"    abstract="true"
10904    static="false" final="false" visibility="public"
10905    deprecated="not deprecated">
10906    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10907    <doc>
10908    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
10909 strategies to resolve injections.
10910
10911 @author jessewilson@google.com (Jesse Wilson)
10912 @since 2.0]]>
10913    </doc>
10914  </interface>
10915  <!-- end interface com.google.inject.spi.UntargettedBinding -->
10916</package>
10917<package name="com.google.inject.spring">
10918  <!-- start class com.google.inject.spring.SpringIntegration -->
10919  <class name="SpringIntegration" extends="java.lang.Object"
10920    abstract="false"
10921    static="false" final="false" visibility="public"
10922    deprecated="not deprecated">
10923    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
10924      abstract="false" native="false" synchronized="false"
10925      static="true" final="false" visibility="public"
10926      deprecated="not deprecated">
10927      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10928      <param name="name" type="java.lang.String"/>
10929      <doc>
10930      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
10931 Expects a binding to {@link
10932 org.springframework.beans.factory.BeanFactory}. Example usage:
10933
10934 <pre>
10935 bind(DataSource.class)
10936   .toProvider(fromSpring(DataSource.class, "dataSource"));
10937 </pre>]]>
10938      </doc>
10939    </method>
10940    <method name="bindAll"
10941      abstract="false" native="false" synchronized="false"
10942      static="true" final="false" visibility="public"
10943      deprecated="not deprecated">
10944      <param name="binder" type="com.google.inject.Binder"/>
10945      <param name="beanFactory" type="org.springframework.beans.factory.ListableBeanFactory"/>
10946      <doc>
10947      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
10948 named "foo", this method creates a binding to the bean's type and
10949 {@code @Named("foo")}.
10950
10951 @see com.google.inject.name.Named
10952 @see com.google.inject.name.Names#named(String)]]>
10953      </doc>
10954    </method>
10955    <doc>
10956    <![CDATA[Integrates Guice with Spring.
10957
10958 @author crazybob@google.com (Bob Lee)]]>
10959    </doc>
10960  </class>
10961  <!-- end class com.google.inject.spring.SpringIntegration -->
10962</package>
10963<package name="com.google.inject.struts2">
10964  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
10965  <class name="GuiceObjectFactory" extends="com.opensymphony.xwork2.ObjectFactory"
10966    abstract="false"
10967    static="false" final="false" visibility="public"
10968    deprecated="Use {@link com.google.inject.struts2.Struts2Factory} instead.">
10969    <constructor name="GuiceObjectFactory"
10970      static="false" final="false" visibility="public"
10971      deprecated="not deprecated">
10972    </constructor>
10973    <method name="isNoArgConstructorRequired" return="boolean"
10974      abstract="false" native="false" synchronized="false"
10975      static="false" final="false" visibility="public"
10976      deprecated="not deprecated">
10977    </method>
10978    <method name="getClassInstance" return="java.lang.Class"
10979      abstract="false" native="false" synchronized="false"
10980      static="false" final="false" visibility="public"
10981      deprecated="not deprecated">
10982      <param name="name" type="java.lang.String"/>
10983      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10984    </method>
10985    <method name="buildBean" return="java.lang.Object"
10986      abstract="false" native="false" synchronized="false"
10987      static="false" final="false" visibility="public"
10988      deprecated="not deprecated">
10989      <param name="clazz" type="java.lang.Class"/>
10990      <param name="extraContext" type="java.util.Map"/>
10991    </method>
10992    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10993      abstract="false" native="false" synchronized="false"
10994      static="false" final="false" visibility="public"
10995      deprecated="not deprecated">
10996      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10997      <param name="interceptorRefParams" type="java.util.Map"/>
10998      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10999    </method>
11000    <doc>
11001    <![CDATA[@deprecated Use {@link com.google.inject.struts2.Struts2Factory} instead.]]>
11002    </doc>
11003  </class>
11004  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
11005  <!-- start class com.google.inject.struts2.Struts2Factory -->
11006  <class name="Struts2Factory" extends="com.opensymphony.xwork2.ObjectFactory"
11007    abstract="false"
11008    static="false" final="false" visibility="public"
11009    deprecated="not deprecated">
11010    <constructor name="Struts2Factory"
11011      static="false" final="false" visibility="public"
11012      deprecated="not deprecated">
11013    </constructor>
11014    <method name="isNoArgConstructorRequired" return="boolean"
11015      abstract="false" native="false" synchronized="false"
11016      static="false" final="false" visibility="public"
11017      deprecated="not deprecated">
11018    </method>
11019    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
11020      abstract="false" native="false" synchronized="false"
11021      static="false" final="false" visibility="public"
11022      deprecated="not deprecated">
11023      <param name="name" type="java.lang.String"/>
11024      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
11025    </method>
11026    <method name="buildBean" return="java.lang.Object"
11027      abstract="false" native="false" synchronized="false"
11028      static="false" final="false" visibility="public"
11029      deprecated="not deprecated">
11030      <param name="clazz" type="java.lang.Class"/>
11031      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
11032    </method>
11033    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
11034      abstract="false" native="false" synchronized="false"
11035      static="false" final="false" visibility="public"
11036      deprecated="not deprecated">
11037      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
11038      <param name="interceptorRefParams" type="java.util.Map"/>
11039      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
11040    </method>
11041    <doc>
11042    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
11043 GS2 and fixes several bugs.
11044
11045 @author dhanji@gmail.com
11046 @author benmccann.com]]>
11047    </doc>
11048  </class>
11049  <!-- end class com.google.inject.struts2.Struts2Factory -->
11050  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
11051  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
11052    abstract="false"
11053    static="false" final="false" visibility="public"
11054    deprecated="not deprecated">
11055    <constructor name="Struts2GuicePluginModule"
11056      static="false" final="false" visibility="public"
11057      deprecated="not deprecated">
11058    </constructor>
11059    <method name="configure"
11060      abstract="false" native="false" synchronized="false"
11061      static="false" final="false" visibility="protected"
11062      deprecated="not deprecated">
11063    </method>
11064    <doc>
11065    <![CDATA[Initializes the Struts 2 Guice Plugin. Must be added to the injector returned
11066 by {@link com.google.inject.servlet.GuiceServletContextListener#getInjector}.
11067
11068 @author benmccann.com]]>
11069    </doc>
11070  </class>
11071  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
11072</package>
11073<package name="com.google.inject.testing.fieldbinder">
11074  <!-- start class com.google.inject.testing.fieldbinder.Bind -->
11075  <class name="Bind"    abstract="true"
11076    static="false" final="false" visibility="public"
11077    deprecated="not deprecated">
11078    <implements name="java.lang.annotation.Annotation"/>
11079    <doc>
11080    <![CDATA[Annotation used by {@link BoundFieldModule} to indicate that a field should be bound to its
11081 value using Guice.
11082
11083 <p>Binding to {@code null} is only allowed for fields that are annotated {@code @Nullable}. See
11084 <a href="https://github.com/google/guice/wiki/UseNullable">https://github.com/google/guice/wiki/UseNullable</a>
11085
11086 @see BoundFieldModule
11087 @author eatnumber1@google.com (Russ Harmon)]]>
11088    </doc>
11089  </class>
11090  <!-- end class com.google.inject.testing.fieldbinder.Bind -->
11091  <!-- start class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11092  <class name="BoundFieldModule" extends="java.lang.Object"
11093    abstract="false"
11094    static="false" final="true" visibility="public"
11095    deprecated="not deprecated">
11096    <implements name="com.google.inject.Module"/>
11097    <method name="of" return="com.google.inject.testing.fieldbinder.BoundFieldModule"
11098      abstract="false" native="false" synchronized="false"
11099      static="true" final="false" visibility="public"
11100      deprecated="not deprecated">
11101      <param name="instance" type="java.lang.Object"/>
11102      <doc>
11103      <![CDATA[Create a BoundFieldModule which binds the {@link Bind} annotated fields of {@code instance}.
11104
11105 @param instance the instance whose fields will be bound.
11106 @return a module which will bind the {@link Bind} annotated fields of {@code instance}.]]>
11107      </doc>
11108    </method>
11109    <method name="configure"
11110      abstract="false" native="false" synchronized="false"
11111      static="false" final="false" visibility="public"
11112      deprecated="not deprecated">
11113      <param name="binder" type="com.google.inject.Binder"/>
11114    </method>
11115    <doc>
11116    <![CDATA[Automatically creates Guice bindings for fields in an object annotated with {@link Bind}.
11117
11118 <p>This module is intended for use in tests to reduce the code needed to bind local fields
11119 (usually mocks) for injection.
11120
11121 <p>The following rules are followed in determining how fields are bound using this module:
11122
11123 <ul>
11124 <li>
11125 For each {@link Bind} annotated field of an object and its superclasses, this module will bind
11126 that field's type to that field's value at injector creation time. This includes both instance
11127 and static fields.
11128 </li>
11129 <li>
11130 If {@link Bind#to} is specified, the field's value will be bound to the class specified by
11131 {@link Bind#to} instead of the field's actual type.
11132 </li>
11133 <li>
11134 If a {@link BindingAnnotation} or {@link javax.inject.Qualifier} is present on the field,
11135 that field will be bound using that annotation via {@link AnnotatedBindingBuilder#annotatedWith}.
11136 For example, {@code bind(Foo.class).annotatedWith(BarAnnotation.class).toInstance(theValue)}.
11137 It is an error to supply more than one {@link BindingAnnotation} or
11138 {@link javax.inject.Qualifier}.
11139 </li>
11140 <li>
11141 If the field is of type {@link Provider}, the field's value will be bound as a {@link Provider}
11142 using {@link LinkedBindingBuilder#toProvider} to the provider's parameterized type. For example,
11143 {@code Provider<Integer>} binds to {@link Integer}. Attempting to bind a non-parameterized
11144 {@link Provider} without a {@link Bind#to} clause is an error.
11145 </li>
11146 </ul>
11147
11148 <p>Example use:
11149 <pre><code>
11150 public class TestFoo {
11151   // bind(new TypeLiteral{@code <List<Object>>}() {}).toInstance(listOfObjects);
11152   {@literal @}Bind private List{@code <Object>} listOfObjects = Lists.of();
11153
11154   // bind(String.class).toProvider(new Provider() { public String get() { return userName; }});
11155   {@literal @}Bind(lazy = true) private String userName;
11156
11157   // bind(SuperClass.class).toInstance(aSubClass);
11158   {@literal @}Bind(to = SuperClass.class) private SubClass aSubClass = new SubClass();
11159
11160   // bind(String.class).annotatedWith(MyBindingAnnotation.class).toInstance(myString);
11161   {@literal @}Bind
11162   {@literal @}MyBindingAnnotation
11163   private String myString = "hello";
11164
11165   // bind(Object.class).toProvider(myProvider);
11166   {@literal @}Bind private Provider{@code <Object>} myProvider = getProvider();
11167
11168   {@literal @}Before public void setUp() {
11169     Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
11170   }
11171 }
11172 </code></pre>
11173
11174 @see Bind
11175 @author eatnumber1@google.com (Russ Harmon)]]>
11176    </doc>
11177  </class>
11178  <!-- end class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11179</package>
11180<package name="com.google.inject.throwingproviders">
11181  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
11182  <interface name="CheckedProvider"    abstract="true"
11183    static="false" final="false" visibility="public"
11184    deprecated="not deprecated">
11185    <method name="get" return="T"
11186      abstract="true" native="false" synchronized="false"
11187      static="false" final="false" visibility="public"
11188      deprecated="not deprecated">
11189      <exception name="Exception" type="java.lang.Exception"/>
11190    </method>
11191    <doc>
11192    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11193 a checked Exception. Users may not inject {@code T} directly.
11194
11195 <p>This interface must be extended to use application-specific exception types.
11196 Such subinterfaces may not define new methods, but may narrow the exception type.
11197 <pre>
11198 public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
11199   T get() throws CustomExceptionOne, CustomExceptionTwo;
11200 }
11201 </pre>
11202
11203 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11204 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11205 will invoked at most once within each scope.
11206
11207 @since 3.0]]>
11208    </doc>
11209  </interface>
11210  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
11211  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
11212  <class name="CheckedProvides"    abstract="true"
11213    static="false" final="false" visibility="public"
11214    deprecated="not deprecated">
11215    <implements name="java.lang.annotation.Annotation"/>
11216    <doc>
11217    <![CDATA[Annotates methods of a {@link com.google.inject.Module} to create a
11218 {@link CheckedProvider} method binding that can throw exceptions. The
11219 method's return type is bound to a {@link CheckedProvider} that can be
11220 injected. Guice will pass dependencies to the method as parameters. Install
11221 {@literal @}CheckedProvides methods by using
11222 {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
11223 module where the methods are declared.
11224
11225 @author sameb@google.com (Sam Berlin)
11226 @since 3.0]]>
11227    </doc>
11228  </class>
11229  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
11230  <!-- start class com.google.inject.throwingproviders.ThrowingInject -->
11231  <class name="ThrowingInject"    abstract="true"
11232    static="false" final="false" visibility="public"
11233    deprecated="not deprecated">
11234    <implements name="java.lang.annotation.Annotation"/>
11235    <doc>
11236    <![CDATA[A version of {@literal @}{@link Inject} designed for ThrowingProviders.  Use by:
11237 <pre><code>ThrowingProviderBinder.create(binder())
11238    .bind(RemoteProvider.class, Customer.class)
11239    .providing(CustomerImpl.class);
11240 </code></pre>
11241 where CustomerImpl has a constructor annotated with ThrowingInject.
11242
11243 @author sameb@google.com (Sam Berlin)
11244 @since 4.0]]>
11245    </doc>
11246  </class>
11247  <!-- end class com.google.inject.throwingproviders.ThrowingInject -->
11248  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
11249  <interface name="ThrowingProvider"    abstract="true"
11250    static="false" final="false" visibility="public"
11251    deprecated="use {@link CheckedProvider} instead.">
11252    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
11253    <method name="get" return="T"
11254      abstract="true" native="false" synchronized="false"
11255      static="false" final="false" visibility="public"
11256      deprecated="not deprecated">
11257      <exception name="Exception" type="java.lang.Exception"/>
11258    </method>
11259    <doc>
11260    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11261 a checked Exception. Users may not inject {@code T} directly.
11262
11263 <p>This interface must be extended to use application-specific exception types.
11264 Such subinterfaces may not define new methods:
11265 <pre>
11266 public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
11267 </pre>
11268
11269 <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11270 or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11271 will invoked at most once within each scope.
11272
11273 @author jmourits@google.com (Jerome Mourits)
11274 @author jessewilson@google.com (Jesse Wilson)
11275 @deprecated use {@link CheckedProvider} instead.]]>
11276    </doc>
11277  </interface>
11278  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
11279  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11280  <class name="ThrowingProviderBinder" extends="java.lang.Object"
11281    abstract="false"
11282    static="false" final="false" visibility="public"
11283    deprecated="not deprecated">
11284    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
11285      abstract="false" native="false" synchronized="false"
11286      static="true" final="false" visibility="public"
11287      deprecated="not deprecated">
11288      <param name="binder" type="com.google.inject.Binder"/>
11289    </method>
11290    <method name="forModule" return="com.google.inject.Module"
11291      abstract="false" native="false" synchronized="false"
11292      static="true" final="false" visibility="public"
11293      deprecated="not deprecated">
11294      <param name="module" type="com.google.inject.Module"/>
11295      <doc>
11296      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
11297
11298 @since 3.0]]>
11299      </doc>
11300    </method>
11301    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, ?&gt;"
11302      abstract="false" native="false" synchronized="false"
11303      static="false" final="false" visibility="public"
11304      deprecated="Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.">
11305      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11306      <param name="clazz" type="java.lang.reflect.Type"/>
11307      <doc>
11308      <![CDATA[@deprecated Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.]]>
11309      </doc>
11310    </method>
11311    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11312      abstract="false" native="false" synchronized="false"
11313      static="false" final="false" visibility="public"
11314      deprecated="not deprecated">
11315      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11316      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
11317      <doc>
11318      <![CDATA[@since 4.0]]>
11319      </doc>
11320    </method>
11321    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11322      abstract="false" native="false" synchronized="false"
11323      static="false" final="false" visibility="public"
11324      deprecated="not deprecated">
11325      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11326      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
11327      <doc>
11328      <![CDATA[@since 4.0]]>
11329      </doc>
11330    </method>
11331    <doc>
11332    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
11333
11334 <p>You can use a fluent API and custom providers:
11335 <pre><code>ThrowingProviderBinder.create(binder())
11336    .bind(RemoteProvider.class, Customer.class)
11337    .to(RemoteCustomerProvider.class)
11338    .in(RequestScope.class);
11339 </code></pre>
11340 or, you can use throwing provider methods:
11341 <pre><code>class MyModule extends AbstractModule {
11342   configure() {
11343     ThrowingProviderBinder.install(this, binder());
11344   }
11345
11346   {@literal @}CheckedProvides(RemoteProvider.class)
11347   {@literal @}RequestScope
11348   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
11349     return creator.getCustomerOrThrow();
11350   }
11351 }
11352 </code></pre>
11353 You also can declare that a CheckedProvider construct
11354 a particular class whose constructor throws an exception:
11355 <pre><code>ThrowingProviderBinder.create(binder())
11356    .bind(RemoteProvider.class, Customer.class)
11357    .providing(CustomerImpl.class)
11358    .in(RequestScope.class);
11359 </code></pre>
11360
11361 @author jmourits@google.com (Jerome Mourits)
11362 @author jessewilson@google.com (Jesse Wilson)
11363 @author sameb@google.com (Sam Berlin)]]>
11364    </doc>
11365  </class>
11366  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11367  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11368  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
11369    abstract="false"
11370    static="false" final="false" visibility="public"
11371    deprecated="not deprecated">
11372    <constructor name="SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
11373      static="false" final="false" visibility="public"
11374      deprecated="not deprecated">
11375    </constructor>
11376    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11377      abstract="false" native="false" synchronized="false"
11378      static="false" final="false" visibility="public"
11379      deprecated="not deprecated">
11380      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
11381    </method>
11382    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11383      abstract="false" native="false" synchronized="false"
11384      static="false" final="false" visibility="public"
11385      deprecated="not deprecated">
11386      <param name="annotation" type="java.lang.annotation.Annotation"/>
11387    </method>
11388    <method name="scopeExceptions" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11389      abstract="false" native="false" synchronized="false"
11390      static="false" final="false" visibility="public"
11391      deprecated="not deprecated">
11392      <param name="scopeExceptions" type="boolean"/>
11393      <doc>
11394      <![CDATA[Determines if exceptions should be scoped. By default exceptions are scoped.
11395
11396 @param scopeExceptions whether exceptions should be scoped.
11397 @since 4.0]]>
11398      </doc>
11399    </method>
11400    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11401      abstract="false" native="false" synchronized="false"
11402      static="false" final="false" visibility="public"
11403      deprecated="not deprecated">
11404      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
11405    </method>
11406    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11407      abstract="false" native="false" synchronized="false"
11408      static="false" final="false" visibility="public"
11409      deprecated="not deprecated">
11410      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
11411    </method>
11412    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11413      abstract="false" native="false" synchronized="false"
11414      static="false" final="false" visibility="public"
11415      deprecated="not deprecated">
11416      <param name="cxtorClass" type="java.lang.Class&lt;? extends T&gt;"/>
11417      <doc>
11418      <![CDATA[@since 4.0]]>
11419      </doc>
11420    </method>
11421    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11422      abstract="false" native="false" synchronized="false"
11423      static="false" final="false" visibility="public"
11424      deprecated="not deprecated">
11425      <param name="cxtorLiteral" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
11426      <doc>
11427      <![CDATA[@since 4.0]]>
11428      </doc>
11429    </method>
11430    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11431      abstract="false" native="false" synchronized="false"
11432      static="false" final="false" visibility="public"
11433      deprecated="not deprecated">
11434      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
11435    </method>
11436  </class>
11437  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11438</package>
11439<package name="com.google.inject.tools.jmx">
11440  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11441  <interface name="ManagedBindingMBean"    abstract="true"
11442    static="false" final="false" visibility="public"
11443    deprecated="not deprecated">
11444    <method name="getSource" return="java.lang.String"
11445      abstract="true" native="false" synchronized="false"
11446      static="false" final="false" visibility="public"
11447      deprecated="not deprecated">
11448      <doc>
11449      <![CDATA[Gets the source of this binding.]]>
11450      </doc>
11451    </method>
11452    <method name="getProvider" return="java.lang.String"
11453      abstract="true" native="false" synchronized="false"
11454      static="false" final="false" visibility="public"
11455      deprecated="not deprecated">
11456      <doc>
11457      <![CDATA[Gets the provider to which this binding is bound.]]>
11458      </doc>
11459    </method>
11460    <method name="getKey" return="java.lang.String"
11461      abstract="true" native="false" synchronized="false"
11462      static="false" final="false" visibility="public"
11463      deprecated="not deprecated">
11464      <doc>
11465      <![CDATA[Gets the binding key.]]>
11466      </doc>
11467    </method>
11468    <doc>
11469    <![CDATA[JMX interface to bindings.
11470
11471 @author crazybob@google.com (Bob Lee)]]>
11472    </doc>
11473  </interface>
11474  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11475  <!-- start class com.google.inject.tools.jmx.Manager -->
11476  <class name="Manager" extends="java.lang.Object"
11477    abstract="false"
11478    static="false" final="false" visibility="public"
11479    deprecated="not deprecated">
11480    <constructor name="Manager"
11481      static="false" final="false" visibility="public"
11482      deprecated="not deprecated">
11483    </constructor>
11484    <method name="manage"
11485      abstract="false" native="false" synchronized="false"
11486      static="true" final="false" visibility="public"
11487      deprecated="not deprecated">
11488      <param name="domain" type="java.lang.String"/>
11489      <param name="injector" type="com.google.inject.Injector"/>
11490      <doc>
11491      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
11492 Consider using the name of your root {@link Module} class as the domain.]]>
11493      </doc>
11494    </method>
11495    <method name="manage"
11496      abstract="false" native="false" synchronized="false"
11497      static="true" final="false" visibility="public"
11498      deprecated="not deprecated">
11499      <param name="server" type="javax.management.MBeanServer"/>
11500      <param name="domain" type="java.lang.String"/>
11501      <param name="injector" type="com.google.inject.Injector"/>
11502      <doc>
11503      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
11504 Consider using the name of your root {@link Module} class as the domain.]]>
11505      </doc>
11506    </method>
11507    <method name="main"
11508      abstract="false" native="false" synchronized="false"
11509      static="true" final="false" visibility="public"
11510      deprecated="not deprecated">
11511      <param name="args" type="java.lang.String[]"/>
11512      <exception name="Exception" type="java.lang.Exception"/>
11513      <doc>
11514      <![CDATA[Run with no arguments for usage instructions.]]>
11515      </doc>
11516    </method>
11517    <doc>
11518    <![CDATA[Provides a JMX interface to Guice.
11519
11520 @author crazybob@google.com (Bob Lee)]]>
11521    </doc>
11522  </class>
11523  <!-- end class com.google.inject.tools.jmx.Manager -->
11524</package>
11525<package name="com.google.inject.util">
11526  <!-- start class com.google.inject.util.Modules -->
11527  <class name="Modules" extends="java.lang.Object"
11528    abstract="false"
11529    static="false" final="true" visibility="public"
11530    deprecated="not deprecated">
11531    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11532      abstract="false" native="false" synchronized="false"
11533      static="true" final="false" visibility="public"
11534      deprecated="not deprecated">
11535      <param name="modules" type="com.google.inject.Module[]"/>
11536      <doc>
11537      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11538 modules. If a key is bound in both sets of modules, only the binding from the override modules
11539 is kept. If a single {@link PrivateModule} is supplied or all elements are from
11540 a single {@link PrivateBinder}, then this will overwrite the private bindings.
11541 Otherwise, private bindings will not be overwritten unless they are exposed.
11542 This can be used to replace the bindings of a production module with test bindings:
11543 <pre>
11544 Module functionalTestModule
11545     = Modules.override(new ProductionModule()).with(new TestModule());
11546 </pre>
11547
11548 <p>Prefer to write smaller modules that can be reused and tested without overrides.
11549
11550 @param modules the modules whose bindings are open to be overridden]]>
11551      </doc>
11552    </method>
11553    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11554      abstract="false" native="false" synchronized="false"
11555      static="true" final="false" visibility="public"
11556      deprecated="not deprecated">
11557      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11558      <doc>
11559      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11560 modules. If a key is bound in both sets of modules, only the binding from the override modules
11561 is kept. If a single {@link PrivateModule} is supplied or all elements are from
11562 a single {@link PrivateBinder}, then this will overwrite the private bindings.
11563 Otherwise, private bindings will not be overwritten unless they are exposed.
11564 This can be used to replace the bindings of a production module with test bindings:
11565 <pre>
11566 Module functionalTestModule
11567     = Modules.override(getProductionModules()).with(getTestModules());
11568 </pre>
11569
11570 <p>Prefer to write smaller modules that can be reused and tested without overrides.
11571
11572 @param modules the modules whose bindings are open to be overridden]]>
11573      </doc>
11574    </method>
11575    <method name="combine" return="com.google.inject.Module"
11576      abstract="false" native="false" synchronized="false"
11577      static="true" final="false" visibility="public"
11578      deprecated="not deprecated">
11579      <param name="modules" type="com.google.inject.Module[]"/>
11580      <doc>
11581      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11582      </doc>
11583    </method>
11584    <method name="combine" return="com.google.inject.Module"
11585      abstract="false" native="false" synchronized="false"
11586      static="true" final="false" visibility="public"
11587      deprecated="not deprecated">
11588      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11589      <doc>
11590      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11591      </doc>
11592    </method>
11593    <field name="EMPTY_MODULE" type="com.google.inject.Module"
11594      transient="false" volatile="false"
11595      static="true" final="true" visibility="public"
11596      deprecated="not deprecated">
11597    </field>
11598    <doc>
11599    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
11600
11601 @author jessewilson@google.com (Jesse Wilson)
11602 @since 2.0]]>
11603    </doc>
11604  </class>
11605  <!-- end class com.google.inject.util.Modules -->
11606  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11607  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
11608    static="true" final="false" visibility="public"
11609    deprecated="not deprecated">
11610    <method name="with" return="com.google.inject.Module"
11611      abstract="true" native="false" synchronized="false"
11612      static="false" final="false" visibility="public"
11613      deprecated="not deprecated">
11614      <param name="overrides" type="com.google.inject.Module[]"/>
11615      <doc>
11616      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11617      </doc>
11618    </method>
11619    <method name="with" return="com.google.inject.Module"
11620      abstract="true" native="false" synchronized="false"
11621      static="false" final="false" visibility="public"
11622      deprecated="not deprecated">
11623      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11624      <doc>
11625      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11626      </doc>
11627    </method>
11628    <doc>
11629    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11630    </doc>
11631  </interface>
11632  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11633  <!-- start class com.google.inject.util.Providers -->
11634  <class name="Providers" extends="java.lang.Object"
11635    abstract="false"
11636    static="false" final="true" visibility="public"
11637    deprecated="not deprecated">
11638    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
11639      abstract="false" native="false" synchronized="false"
11640      static="true" final="false" visibility="public"
11641      deprecated="not deprecated">
11642      <param name="instance" type="T"/>
11643      <doc>
11644      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
11645 be necessary to use in your application, but is helpful for several types
11646 of unit tests.
11647
11648 @param instance the instance that should always be provided.  This is also
11649     permitted to be null, to enable aggressive testing, although in real
11650     life a Guice-supplied Provider will never return null.]]>
11651      </doc>
11652    </method>
11653    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
11654      abstract="false" native="false" synchronized="false"
11655      static="true" final="false" visibility="public"
11656      deprecated="not deprecated">
11657      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
11658      <doc>
11659      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
11660 JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
11661 since Guice providers directly implement the JSR-330 interface.
11662
11663 @since 3.0]]>
11664      </doc>
11665    </method>
11666    <doc>
11667    <![CDATA[Static utility methods for creating and working with instances of
11668 {@link Provider}.
11669
11670 @author Kevin Bourrillion (kevinb9n@gmail.com)
11671 @since 2.0]]>
11672    </doc>
11673  </class>
11674  <!-- end class com.google.inject.util.Providers -->
11675  <!-- start class com.google.inject.util.Types -->
11676  <class name="Types" extends="java.lang.Object"
11677    abstract="false"
11678    static="false" final="true" visibility="public"
11679    deprecated="not deprecated">
11680    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
11681      abstract="false" native="false" synchronized="false"
11682      static="true" final="false" visibility="public"
11683      deprecated="not deprecated">
11684      <param name="rawType" type="java.lang.reflect.Type"/>
11685      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11686      <doc>
11687      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11688 {@code rawType}. The returned type does not have an owner type.
11689
11690 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11691      </doc>
11692    </method>
11693    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
11694      abstract="false" native="false" synchronized="false"
11695      static="true" final="false" visibility="public"
11696      deprecated="not deprecated">
11697      <param name="ownerType" type="java.lang.reflect.Type"/>
11698      <param name="rawType" type="java.lang.reflect.Type"/>
11699      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11700      <doc>
11701      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11702 {@code rawType} and enclosed by {@code ownerType}.
11703
11704 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11705      </doc>
11706    </method>
11707    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
11708      abstract="false" native="false" synchronized="false"
11709      static="true" final="false" visibility="public"
11710      deprecated="not deprecated">
11711      <param name="componentType" type="java.lang.reflect.Type"/>
11712      <doc>
11713      <![CDATA[Returns an array type whose elements are all instances of
11714 {@code componentType}.
11715
11716 @return a {@link java.io.Serializable serializable} generic array type.]]>
11717      </doc>
11718    </method>
11719    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
11720      abstract="false" native="false" synchronized="false"
11721      static="true" final="false" visibility="public"
11722      deprecated="not deprecated">
11723      <param name="bound" type="java.lang.reflect.Type"/>
11724      <doc>
11725      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
11726 For example, if {@code bound} is {@code CharSequence.class}, this returns
11727 {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
11728 this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
11729      </doc>
11730    </method>
11731    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
11732      abstract="false" native="false" synchronized="false"
11733      static="true" final="false" visibility="public"
11734      deprecated="not deprecated">
11735      <param name="bound" type="java.lang.reflect.Type"/>
11736      <doc>
11737      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
11738 example, if {@code bound} is {@code String.class}, this returns {@code ?
11739 super String}.]]>
11740      </doc>
11741    </method>
11742    <method name="listOf" return="java.lang.reflect.ParameterizedType"
11743      abstract="false" native="false" synchronized="false"
11744      static="true" final="false" visibility="public"
11745      deprecated="not deprecated">
11746      <param name="elementType" type="java.lang.reflect.Type"/>
11747      <doc>
11748      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
11749 {@code elementType}.
11750
11751 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11752      </doc>
11753    </method>
11754    <method name="collectionOf" return="java.lang.reflect.ParameterizedType"
11755      abstract="false" native="false" synchronized="false"
11756      static="true" final="false" visibility="public"
11757      deprecated="not deprecated">
11758      <param name="elementType" type="java.lang.reflect.Type"/>
11759      <doc>
11760      <![CDATA[Returns a type modelling a {@link Collection} whose elements are of type
11761 {@code elementType}.
11762
11763 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11764      </doc>
11765    </method>
11766    <method name="setOf" return="java.lang.reflect.ParameterizedType"
11767      abstract="false" native="false" synchronized="false"
11768      static="true" final="false" visibility="public"
11769      deprecated="not deprecated">
11770      <param name="elementType" type="java.lang.reflect.Type"/>
11771      <doc>
11772      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
11773 {@code elementType}.
11774
11775 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11776      </doc>
11777    </method>
11778    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
11779      abstract="false" native="false" synchronized="false"
11780      static="true" final="false" visibility="public"
11781      deprecated="not deprecated">
11782      <param name="keyType" type="java.lang.reflect.Type"/>
11783      <param name="valueType" type="java.lang.reflect.Type"/>
11784      <doc>
11785      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
11786 {@code keyType} and whose values are of type {@code valueType}.
11787
11788 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11789      </doc>
11790    </method>
11791    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
11792      abstract="false" native="false" synchronized="false"
11793      static="true" final="false" visibility="public"
11794      deprecated="not deprecated">
11795      <param name="providedType" type="java.lang.reflect.Type"/>
11796      <doc>
11797      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
11798 {@code elementType}.
11799
11800 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11801      </doc>
11802    </method>
11803    <method name="javaxProviderOf" return="java.lang.reflect.Type"
11804      abstract="false" native="false" synchronized="false"
11805      static="true" final="false" visibility="public"
11806      deprecated="not deprecated">
11807      <param name="type" type="java.lang.reflect.Type"/>
11808      <doc>
11809      <![CDATA[Returns a type modelling a {@link javax.inject.Provider} that provides elements of type
11810 {@code elementType}.
11811
11812 @return a {@link java.io.Serializable serializable} parameterized type.]]>
11813      </doc>
11814    </method>
11815    <doc>
11816    <![CDATA[Static methods for working with types.
11817
11818 @author crazybob@google.com (Bob Lee)
11819 @since 2.0]]>
11820    </doc>
11821  </class>
11822  <!-- end class com.google.inject.util.Types -->
11823</package>
11824
11825</api>
11826