xref: /aosp_15_r20/external/guice/latest-api-diffs/4.1.xml (revision dc5640d1ceac12a29404866b9a53df952a7a6c47)
1*dc5640d1SHerbert Xue<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
2*dc5640d1SHerbert Xue<!-- Generated by the JDiff Javadoc doclet -->
3*dc5640d1SHerbert Xue<!-- (http://www.jdiff.org) -->
4*dc5640d1SHerbert Xue<!-- on Fri Jun 17 16:00:51 EDT 2016 -->
5*dc5640d1SHerbert Xue
6*dc5640d1SHerbert Xue<api
7*dc5640d1SHerbert Xue  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
8*dc5640d1SHerbert Xue  xsi:noNamespaceSchemaLocation='api.xsd'
9*dc5640d1SHerbert Xue  name="4.1"
10*dc5640d1SHerbert Xue  jdversion="1.1.1">
11*dc5640d1SHerbert Xue
12*dc5640d1SHerbert Xue<!--  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*dc5640d1SHerbert Xue<package name="com.google.inject">
14*dc5640d1SHerbert Xue  <!-- start class com.google.inject.AbstractModule -->
15*dc5640d1SHerbert Xue  <class name="AbstractModule" extends="java.lang.Object"
16*dc5640d1SHerbert Xue    abstract="true"
17*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
18*dc5640d1SHerbert Xue    deprecated="not deprecated">
19*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
20*dc5640d1SHerbert Xue    <constructor name="AbstractModule"
21*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
22*dc5640d1SHerbert Xue      deprecated="not deprecated">
23*dc5640d1SHerbert Xue    </constructor>
24*dc5640d1SHerbert Xue    <method name="configure"
25*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="true"
26*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
27*dc5640d1SHerbert Xue      deprecated="not deprecated">
28*dc5640d1SHerbert Xue      <param name="builder" type="com.google.inject.Binder"/>
29*dc5640d1SHerbert Xue    </method>
30*dc5640d1SHerbert Xue    <method name="configure"
31*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
32*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
33*dc5640d1SHerbert Xue      deprecated="not deprecated">
34*dc5640d1SHerbert Xue      <doc>
35*dc5640d1SHerbert Xue      <![CDATA[Configures a {@link Binder} via the exposed methods.]]>
36*dc5640d1SHerbert Xue      </doc>
37*dc5640d1SHerbert Xue    </method>
38*dc5640d1SHerbert Xue    <method name="binder" return="com.google.inject.Binder"
39*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
40*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
41*dc5640d1SHerbert Xue      deprecated="not deprecated">
42*dc5640d1SHerbert Xue      <doc>
43*dc5640d1SHerbert Xue      <![CDATA[Gets direct access to the underlying {@code Binder}.]]>
44*dc5640d1SHerbert Xue      </doc>
45*dc5640d1SHerbert Xue    </method>
46*dc5640d1SHerbert Xue    <method name="bindScope"
47*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
48*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
49*dc5640d1SHerbert Xue      deprecated="not deprecated">
50*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
51*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
52*dc5640d1SHerbert Xue      <doc>
53*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
54*dc5640d1SHerbert Xue      </doc>
55*dc5640d1SHerbert Xue    </method>
56*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
57*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
58*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
59*dc5640d1SHerbert Xue      deprecated="not deprecated">
60*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
61*dc5640d1SHerbert Xue      <doc>
62*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Key)]]>
63*dc5640d1SHerbert Xue      </doc>
64*dc5640d1SHerbert Xue    </method>
65*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
66*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
67*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
68*dc5640d1SHerbert Xue      deprecated="not deprecated">
69*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
70*dc5640d1SHerbert Xue      <doc>
71*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(TypeLiteral)]]>
72*dc5640d1SHerbert Xue      </doc>
73*dc5640d1SHerbert Xue    </method>
74*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
75*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
76*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
77*dc5640d1SHerbert Xue      deprecated="not deprecated">
78*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
79*dc5640d1SHerbert Xue      <doc>
80*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Class)]]>
81*dc5640d1SHerbert Xue      </doc>
82*dc5640d1SHerbert Xue    </method>
83*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
84*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
85*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
86*dc5640d1SHerbert Xue      deprecated="not deprecated">
87*dc5640d1SHerbert Xue      <doc>
88*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindConstant()]]>
89*dc5640d1SHerbert Xue      </doc>
90*dc5640d1SHerbert Xue    </method>
91*dc5640d1SHerbert Xue    <method name="install"
92*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
93*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
94*dc5640d1SHerbert Xue      deprecated="not deprecated">
95*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
96*dc5640d1SHerbert Xue      <doc>
97*dc5640d1SHerbert Xue      <![CDATA[@see Binder#install(Module)]]>
98*dc5640d1SHerbert Xue      </doc>
99*dc5640d1SHerbert Xue    </method>
100*dc5640d1SHerbert Xue    <method name="addError"
101*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
102*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
103*dc5640d1SHerbert Xue      deprecated="not deprecated">
104*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
105*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
106*dc5640d1SHerbert Xue      <doc>
107*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(String, Object[])]]>
108*dc5640d1SHerbert Xue      </doc>
109*dc5640d1SHerbert Xue    </method>
110*dc5640d1SHerbert Xue    <method name="addError"
111*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
112*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
113*dc5640d1SHerbert Xue      deprecated="not deprecated">
114*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
115*dc5640d1SHerbert Xue      <doc>
116*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Throwable)]]>
117*dc5640d1SHerbert Xue      </doc>
118*dc5640d1SHerbert Xue    </method>
119*dc5640d1SHerbert Xue    <method name="addError"
120*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
121*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
122*dc5640d1SHerbert Xue      deprecated="not deprecated">
123*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
124*dc5640d1SHerbert Xue      <doc>
125*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Message)
126*dc5640d1SHerbert Xue @since 2.0]]>
127*dc5640d1SHerbert Xue      </doc>
128*dc5640d1SHerbert Xue    </method>
129*dc5640d1SHerbert Xue    <method name="requestInjection"
130*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
131*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
132*dc5640d1SHerbert Xue      deprecated="not deprecated">
133*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
134*dc5640d1SHerbert Xue      <doc>
135*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestInjection(Object)
136*dc5640d1SHerbert Xue @since 2.0]]>
137*dc5640d1SHerbert Xue      </doc>
138*dc5640d1SHerbert Xue    </method>
139*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
140*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
141*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
142*dc5640d1SHerbert Xue      deprecated="not deprecated">
143*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
144*dc5640d1SHerbert Xue      <doc>
145*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
146*dc5640d1SHerbert Xue      </doc>
147*dc5640d1SHerbert Xue    </method>
148*dc5640d1SHerbert Xue    <method name="bindInterceptor"
149*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
150*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
151*dc5640d1SHerbert Xue      deprecated="not deprecated">
152*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
153*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
154*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
155*dc5640d1SHerbert Xue      <doc>
156*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher,
157*dc5640d1SHerbert Xue  com.google.inject.matcher.Matcher,
158*dc5640d1SHerbert Xue  org.aopalliance.intercept.MethodInterceptor[])]]>
159*dc5640d1SHerbert Xue      </doc>
160*dc5640d1SHerbert Xue    </method>
161*dc5640d1SHerbert Xue    <method name="requireBinding"
162*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
163*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
164*dc5640d1SHerbert Xue      deprecated="not deprecated">
165*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
166*dc5640d1SHerbert Xue      <doc>
167*dc5640d1SHerbert Xue      <![CDATA[Adds a dependency from this module to {@code key}. When the injector is
168*dc5640d1SHerbert Xue created, Guice will report an error if {@code key} cannot be injected.
169*dc5640d1SHerbert Xue Note that this requirement may be satisfied by implicit binding, such as
170*dc5640d1SHerbert Xue a public no-arguments constructor.
171*dc5640d1SHerbert Xue
172*dc5640d1SHerbert Xue @since 2.0]]>
173*dc5640d1SHerbert Xue      </doc>
174*dc5640d1SHerbert Xue    </method>
175*dc5640d1SHerbert Xue    <method name="requireBinding"
176*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
177*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
178*dc5640d1SHerbert Xue      deprecated="not deprecated">
179*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
180*dc5640d1SHerbert Xue      <doc>
181*dc5640d1SHerbert Xue      <![CDATA[Adds a dependency from this module to {@code type}. When the injector is
182*dc5640d1SHerbert Xue created, Guice will report an error if {@code type} cannot be injected.
183*dc5640d1SHerbert Xue Note that this requirement may be satisfied by implicit binding, such as
184*dc5640d1SHerbert Xue a public no-arguments constructor.
185*dc5640d1SHerbert Xue
186*dc5640d1SHerbert Xue @since 2.0]]>
187*dc5640d1SHerbert Xue      </doc>
188*dc5640d1SHerbert Xue    </method>
189*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
190*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
191*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
192*dc5640d1SHerbert Xue      deprecated="not deprecated">
193*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
194*dc5640d1SHerbert Xue      <doc>
195*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Key)
196*dc5640d1SHerbert Xue @since 2.0]]>
197*dc5640d1SHerbert Xue      </doc>
198*dc5640d1SHerbert Xue    </method>
199*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
200*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
201*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
202*dc5640d1SHerbert Xue      deprecated="not deprecated">
203*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
204*dc5640d1SHerbert Xue      <doc>
205*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Class)
206*dc5640d1SHerbert Xue @since 2.0]]>
207*dc5640d1SHerbert Xue      </doc>
208*dc5640d1SHerbert Xue    </method>
209*dc5640d1SHerbert Xue    <method name="convertToTypes"
210*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
211*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
212*dc5640d1SHerbert Xue      deprecated="not deprecated">
213*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
214*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
215*dc5640d1SHerbert Xue      <doc>
216*dc5640d1SHerbert Xue      <![CDATA[@see Binder#convertToTypes
217*dc5640d1SHerbert Xue @since 2.0]]>
218*dc5640d1SHerbert Xue      </doc>
219*dc5640d1SHerbert Xue    </method>
220*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
221*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
222*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
223*dc5640d1SHerbert Xue      deprecated="not deprecated">
224*dc5640d1SHerbert Xue      <doc>
225*dc5640d1SHerbert Xue      <![CDATA[@see Binder#currentStage()
226*dc5640d1SHerbert Xue @since 2.0]]>
227*dc5640d1SHerbert Xue      </doc>
228*dc5640d1SHerbert Xue    </method>
229*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
230*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
231*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
232*dc5640d1SHerbert Xue      deprecated="not deprecated">
233*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
234*dc5640d1SHerbert Xue      <doc>
235*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(Class)
236*dc5640d1SHerbert Xue @since 2.0]]>
237*dc5640d1SHerbert Xue      </doc>
238*dc5640d1SHerbert Xue    </method>
239*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
240*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
241*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
242*dc5640d1SHerbert Xue      deprecated="not deprecated">
243*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
244*dc5640d1SHerbert Xue      <doc>
245*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)
246*dc5640d1SHerbert Xue @since 2.0]]>
247*dc5640d1SHerbert Xue      </doc>
248*dc5640d1SHerbert Xue    </method>
249*dc5640d1SHerbert Xue    <method name="bindListener"
250*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
251*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
252*dc5640d1SHerbert Xue      deprecated="not deprecated">
253*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
254*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
255*dc5640d1SHerbert Xue      <doc>
256*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher,
257*dc5640d1SHerbert Xue  com.google.inject.spi.TypeListener)
258*dc5640d1SHerbert Xue @since 2.0]]>
259*dc5640d1SHerbert Xue      </doc>
260*dc5640d1SHerbert Xue    </method>
261*dc5640d1SHerbert Xue    <method name="bindListener"
262*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
263*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
264*dc5640d1SHerbert Xue      deprecated="not deprecated">
265*dc5640d1SHerbert Xue      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
266*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.ProvisionListener[]"/>
267*dc5640d1SHerbert Xue      <doc>
268*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
269*dc5640d1SHerbert Xue @since 4.0]]>
270*dc5640d1SHerbert Xue      </doc>
271*dc5640d1SHerbert Xue    </method>
272*dc5640d1SHerbert Xue    <doc>
273*dc5640d1SHerbert Xue    <![CDATA[A support class for {@link Module}s which reduces repetition and results in
274*dc5640d1SHerbert Xue a more readable configuration. Simply extend this class, implement {@link
275*dc5640d1SHerbert Xue #configure()}, and call the inherited methods which mirror those found in
276*dc5640d1SHerbert Xue {@link Binder}. For example:
277*dc5640d1SHerbert Xue
278*dc5640d1SHerbert Xue <pre>
279*dc5640d1SHerbert Xue public class MyModule extends AbstractModule {
280*dc5640d1SHerbert Xue   protected void configure() {
281*dc5640d1SHerbert Xue     bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
282*dc5640d1SHerbert Xue     bind(CreditCardPaymentService.class);
283*dc5640d1SHerbert Xue     bind(PaymentService.class).to(CreditCardPaymentService.class);
284*dc5640d1SHerbert Xue     bindConstant().annotatedWith(Names.named("port")).to(8080);
285*dc5640d1SHerbert Xue   }
286*dc5640d1SHerbert Xue }
287*dc5640d1SHerbert Xue </pre>
288*dc5640d1SHerbert Xue
289*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
290*dc5640d1SHerbert Xue    </doc>
291*dc5640d1SHerbert Xue  </class>
292*dc5640d1SHerbert Xue  <!-- end class com.google.inject.AbstractModule -->
293*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Binder -->
294*dc5640d1SHerbert Xue  <interface name="Binder"    abstract="true"
295*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
296*dc5640d1SHerbert Xue    deprecated="not deprecated">
297*dc5640d1SHerbert Xue    <method name="bindInterceptor"
298*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
299*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
300*dc5640d1SHerbert Xue      deprecated="not deprecated">
301*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
302*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
303*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
304*dc5640d1SHerbert Xue      <doc>
305*dc5640d1SHerbert Xue      <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
306*dc5640d1SHerbert Xue eligible for interception if:
307*dc5640d1SHerbert Xue
308*dc5640d1SHerbert Xue <ul>
309*dc5640d1SHerbert Xue  <li>Guice created the instance the method is on</li>
310*dc5640d1SHerbert Xue  <li>Neither the enclosing type nor the method is final</li>
311*dc5640d1SHerbert Xue  <li>And the method is package-private, protected, or public</li>
312*dc5640d1SHerbert Xue </ul>
313*dc5640d1SHerbert Xue
314*dc5640d1SHerbert Xue @param classMatcher matches classes the interceptor should apply to. For
315*dc5640d1SHerbert Xue     example: {@code only(Runnable.class)}.
316*dc5640d1SHerbert Xue @param methodMatcher matches methods the interceptor should apply to. For
317*dc5640d1SHerbert Xue     example: {@code annotatedWith(Transactional.class)}.
318*dc5640d1SHerbert Xue @param interceptors to bind.  The interceptors are called in the order they
319*dc5640d1SHerbert Xue     are given.]]>
320*dc5640d1SHerbert Xue      </doc>
321*dc5640d1SHerbert Xue    </method>
322*dc5640d1SHerbert Xue    <method name="bindScope"
323*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
324*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
325*dc5640d1SHerbert Xue      deprecated="not deprecated">
326*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
327*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
328*dc5640d1SHerbert Xue      <doc>
329*dc5640d1SHerbert Xue      <![CDATA[Binds a scope to an annotation.]]>
330*dc5640d1SHerbert Xue      </doc>
331*dc5640d1SHerbert Xue    </method>
332*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
333*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
334*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
335*dc5640d1SHerbert Xue      deprecated="not deprecated">
336*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
337*dc5640d1SHerbert Xue      <doc>
338*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
339*dc5640d1SHerbert Xue      </doc>
340*dc5640d1SHerbert Xue    </method>
341*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
342*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
343*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
344*dc5640d1SHerbert Xue      deprecated="not deprecated">
345*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
346*dc5640d1SHerbert Xue      <doc>
347*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
348*dc5640d1SHerbert Xue      </doc>
349*dc5640d1SHerbert Xue    </method>
350*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
351*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
352*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
353*dc5640d1SHerbert Xue      deprecated="not deprecated">
354*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
355*dc5640d1SHerbert Xue      <doc>
356*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
357*dc5640d1SHerbert Xue      </doc>
358*dc5640d1SHerbert Xue    </method>
359*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
360*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
361*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
362*dc5640d1SHerbert Xue      deprecated="not deprecated">
363*dc5640d1SHerbert Xue      <doc>
364*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link Binder}.]]>
365*dc5640d1SHerbert Xue      </doc>
366*dc5640d1SHerbert Xue    </method>
367*dc5640d1SHerbert Xue    <method name="requestInjection"
368*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
369*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
370*dc5640d1SHerbert Xue      deprecated="not deprecated">
371*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
372*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
373*dc5640d1SHerbert Xue      <doc>
374*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
375*dc5640d1SHerbert Xue and methods of the given object.
376*dc5640d1SHerbert Xue
377*dc5640d1SHerbert Xue @param type of instance
378*dc5640d1SHerbert Xue @param instance for which members will be injected
379*dc5640d1SHerbert Xue @since 2.0]]>
380*dc5640d1SHerbert Xue      </doc>
381*dc5640d1SHerbert Xue    </method>
382*dc5640d1SHerbert Xue    <method name="requestInjection"
383*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
384*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
385*dc5640d1SHerbert Xue      deprecated="not deprecated">
386*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
387*dc5640d1SHerbert Xue      <doc>
388*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
389*dc5640d1SHerbert Xue and methods of the given object.
390*dc5640d1SHerbert Xue
391*dc5640d1SHerbert Xue @param instance for which members will be injected
392*dc5640d1SHerbert Xue @since 2.0]]>
393*dc5640d1SHerbert Xue      </doc>
394*dc5640d1SHerbert Xue    </method>
395*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
396*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
397*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
398*dc5640d1SHerbert Xue      deprecated="not deprecated">
399*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
400*dc5640d1SHerbert Xue      <doc>
401*dc5640d1SHerbert Xue      <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
402*dc5640d1SHerbert Xue and methods in the given classes.
403*dc5640d1SHerbert Xue
404*dc5640d1SHerbert Xue @param types for which static members will be injected]]>
405*dc5640d1SHerbert Xue      </doc>
406*dc5640d1SHerbert Xue    </method>
407*dc5640d1SHerbert Xue    <method name="install"
408*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
409*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
410*dc5640d1SHerbert Xue      deprecated="not deprecated">
411*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
412*dc5640d1SHerbert Xue      <doc>
413*dc5640d1SHerbert Xue      <![CDATA[Uses the given module to configure more bindings.]]>
414*dc5640d1SHerbert Xue      </doc>
415*dc5640d1SHerbert Xue    </method>
416*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
417*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
418*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
419*dc5640d1SHerbert Xue      deprecated="not deprecated">
420*dc5640d1SHerbert Xue      <doc>
421*dc5640d1SHerbert Xue      <![CDATA[Gets the current stage.]]>
422*dc5640d1SHerbert Xue      </doc>
423*dc5640d1SHerbert Xue    </method>
424*dc5640d1SHerbert Xue    <method name="addError"
425*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
426*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
427*dc5640d1SHerbert Xue      deprecated="not deprecated">
428*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
429*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
430*dc5640d1SHerbert Xue      <doc>
431*dc5640d1SHerbert Xue      <![CDATA[Records an error message which will be presented to the user at a later
432*dc5640d1SHerbert Xue time. Unlike throwing an exception, this enable us to continue
433*dc5640d1SHerbert Xue configuring the Injector and discover more errors. Uses {@link
434*dc5640d1SHerbert Xue String#format(String, Object[])} to insert the arguments into the
435*dc5640d1SHerbert Xue message.]]>
436*dc5640d1SHerbert Xue      </doc>
437*dc5640d1SHerbert Xue    </method>
438*dc5640d1SHerbert Xue    <method name="addError"
439*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
440*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
441*dc5640d1SHerbert Xue      deprecated="not deprecated">
442*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
443*dc5640d1SHerbert Xue      <doc>
444*dc5640d1SHerbert Xue      <![CDATA[Records an exception, the full details of which will be logged, and the
445*dc5640d1SHerbert Xue message of which will be presented to the user at a later
446*dc5640d1SHerbert Xue time. If your Module calls something that you worry may fail, you should
447*dc5640d1SHerbert Xue catch the exception and pass it into this.]]>
448*dc5640d1SHerbert Xue      </doc>
449*dc5640d1SHerbert Xue    </method>
450*dc5640d1SHerbert Xue    <method name="addError"
451*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
452*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
453*dc5640d1SHerbert Xue      deprecated="not deprecated">
454*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
455*dc5640d1SHerbert Xue      <doc>
456*dc5640d1SHerbert Xue      <![CDATA[Records an error message to be presented to the user at a later time.
457*dc5640d1SHerbert Xue
458*dc5640d1SHerbert Xue @since 2.0]]>
459*dc5640d1SHerbert Xue      </doc>
460*dc5640d1SHerbert Xue    </method>
461*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
462*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
463*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
464*dc5640d1SHerbert Xue      deprecated="not deprecated">
465*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
466*dc5640d1SHerbert Xue      <doc>
467*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key.
468*dc5640d1SHerbert Xue The returned provider will not be valid until the {@link Injector} has been
469*dc5640d1SHerbert Xue created. The provider will throw an {@code IllegalStateException} if you
470*dc5640d1SHerbert Xue try to use it beforehand.
471*dc5640d1SHerbert Xue
472*dc5640d1SHerbert Xue @since 2.0]]>
473*dc5640d1SHerbert Xue      </doc>
474*dc5640d1SHerbert Xue    </method>
475*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
476*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
477*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
478*dc5640d1SHerbert Xue      deprecated="not deprecated">
479*dc5640d1SHerbert Xue      <param name="dependency" type="com.google.inject.spi.Dependency&lt;T&gt;"/>
480*dc5640d1SHerbert Xue      <doc>
481*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key.
482*dc5640d1SHerbert Xue The returned provider will be attached to the injection point and will
483*dc5640d1SHerbert Xue follow the nullability specified in the dependency.
484*dc5640d1SHerbert Xue Additionally, the returned provider will not be valid until the {@link Injector}
485*dc5640d1SHerbert Xue has been created. The provider will throw an {@code IllegalStateException} if you
486*dc5640d1SHerbert Xue try to use it beforehand.
487*dc5640d1SHerbert Xue
488*dc5640d1SHerbert Xue @since 4.0]]>
489*dc5640d1SHerbert Xue      </doc>
490*dc5640d1SHerbert Xue    </method>
491*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
492*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
493*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
494*dc5640d1SHerbert Xue      deprecated="not deprecated">
495*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
496*dc5640d1SHerbert Xue      <doc>
497*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection type.
498*dc5640d1SHerbert Xue The returned provider will not be valid until the {@link Injector} has been
499*dc5640d1SHerbert Xue created. The provider will throw an {@code IllegalStateException} if you
500*dc5640d1SHerbert Xue try to use it beforehand.
501*dc5640d1SHerbert Xue
502*dc5640d1SHerbert Xue @since 2.0]]>
503*dc5640d1SHerbert Xue      </doc>
504*dc5640d1SHerbert Xue    </method>
505*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
506*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
507*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
508*dc5640d1SHerbert Xue      deprecated="not deprecated">
509*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
510*dc5640d1SHerbert Xue      <doc>
511*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
512*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
513*dc5640d1SHerbert Xue {@link Injector} has been created. The members injector will throw an {@code
514*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.
515*dc5640d1SHerbert Xue
516*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for
517*dc5640d1SHerbert Xue @since 2.0]]>
518*dc5640d1SHerbert Xue      </doc>
519*dc5640d1SHerbert Xue    </method>
520*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
521*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
522*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
523*dc5640d1SHerbert Xue      deprecated="not deprecated">
524*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
525*dc5640d1SHerbert Xue      <doc>
526*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
527*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
528*dc5640d1SHerbert Xue {@link Injector} has been created. The members injector will throw an {@code
529*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.
530*dc5640d1SHerbert Xue
531*dc5640d1SHerbert Xue @param type type to get members injector for
532*dc5640d1SHerbert Xue @since 2.0]]>
533*dc5640d1SHerbert Xue      </doc>
534*dc5640d1SHerbert Xue    </method>
535*dc5640d1SHerbert Xue    <method name="convertToTypes"
536*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
537*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
538*dc5640d1SHerbert Xue      deprecated="not deprecated">
539*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
540*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
541*dc5640d1SHerbert Xue      <doc>
542*dc5640d1SHerbert Xue      <![CDATA[Binds a type converter. The injector will use the given converter to
543*dc5640d1SHerbert Xue convert string constants to matching types as needed.
544*dc5640d1SHerbert Xue
545*dc5640d1SHerbert Xue @param typeMatcher matches types the converter can handle
546*dc5640d1SHerbert Xue @param converter converts values
547*dc5640d1SHerbert Xue @since 2.0]]>
548*dc5640d1SHerbert Xue      </doc>
549*dc5640d1SHerbert Xue    </method>
550*dc5640d1SHerbert Xue    <method name="bindListener"
551*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
552*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
553*dc5640d1SHerbert Xue      deprecated="not deprecated">
554*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
555*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
556*dc5640d1SHerbert Xue      <doc>
557*dc5640d1SHerbert Xue      <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
558*dc5640d1SHerbert Xue injectable types matched by the given type matcher.
559*dc5640d1SHerbert Xue
560*dc5640d1SHerbert Xue @param typeMatcher that matches injectable types the listener should be notified of
561*dc5640d1SHerbert Xue @param listener for injectable types matched by typeMatcher
562*dc5640d1SHerbert Xue @since 2.0]]>
563*dc5640d1SHerbert Xue      </doc>
564*dc5640d1SHerbert Xue    </method>
565*dc5640d1SHerbert Xue    <method name="bindListener"
566*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
567*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
568*dc5640d1SHerbert Xue      deprecated="not deprecated">
569*dc5640d1SHerbert Xue      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
570*dc5640d1SHerbert Xue      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
571*dc5640d1SHerbert Xue      <doc>
572*dc5640d1SHerbert Xue      <![CDATA[Registers listeners for provisioned objects. Guice will notify the
573*dc5640d1SHerbert Xue listeners just before and after the object is provisioned. Provisioned
574*dc5640d1SHerbert Xue objects that are also injectable (everything except objects provided
575*dc5640d1SHerbert Xue through Providers) can also be notified through TypeListeners registered in
576*dc5640d1SHerbert Xue {@link #bindListener}.
577*dc5640d1SHerbert Xue
578*dc5640d1SHerbert Xue @param bindingMatcher that matches bindings of provisioned objects the listener
579*dc5640d1SHerbert Xue          should be notified of
580*dc5640d1SHerbert Xue @param listeners for provisioned objects matched by bindingMatcher
581*dc5640d1SHerbert Xue @since 4.0]]>
582*dc5640d1SHerbert Xue      </doc>
583*dc5640d1SHerbert Xue    </method>
584*dc5640d1SHerbert Xue    <method name="withSource" return="com.google.inject.Binder"
585*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
586*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
587*dc5640d1SHerbert Xue      deprecated="not deprecated">
588*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
589*dc5640d1SHerbert Xue      <doc>
590*dc5640d1SHerbert Xue      <![CDATA[Returns a binder that uses {@code source} as the reference location for
591*dc5640d1SHerbert Xue configuration errors. This is typically a {@link StackTraceElement}
592*dc5640d1SHerbert Xue for {@code .java} source but it could any binding source, such as the
593*dc5640d1SHerbert Xue path to a {@code .properties} file.
594*dc5640d1SHerbert Xue
595*dc5640d1SHerbert Xue @param source any object representing the source location and has a
596*dc5640d1SHerbert Xue     concise {@link Object#toString() toString()} value
597*dc5640d1SHerbert Xue @return a binder that shares its configuration with this binder
598*dc5640d1SHerbert Xue @since 2.0]]>
599*dc5640d1SHerbert Xue      </doc>
600*dc5640d1SHerbert Xue    </method>
601*dc5640d1SHerbert Xue    <method name="skipSources" return="com.google.inject.Binder"
602*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
603*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
604*dc5640d1SHerbert Xue      deprecated="not deprecated">
605*dc5640d1SHerbert Xue      <param name="classesToSkip" type="java.lang.Class[]"/>
606*dc5640d1SHerbert Xue      <doc>
607*dc5640d1SHerbert Xue      <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
608*dc5640d1SHerbert Xue calling code. The caller's {@link StackTraceElement} is used to locate
609*dc5640d1SHerbert Xue the source of configuration errors.
610*dc5640d1SHerbert Xue
611*dc5640d1SHerbert Xue @param classesToSkip library classes that create bindings on behalf of
612*dc5640d1SHerbert Xue      their clients.
613*dc5640d1SHerbert Xue @return a binder that shares its configuration with this binder.
614*dc5640d1SHerbert Xue @since 2.0]]>
615*dc5640d1SHerbert Xue      </doc>
616*dc5640d1SHerbert Xue    </method>
617*dc5640d1SHerbert Xue    <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
618*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
619*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
620*dc5640d1SHerbert Xue      deprecated="not deprecated">
621*dc5640d1SHerbert Xue      <doc>
622*dc5640d1SHerbert Xue      <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
623*dc5640d1SHerbert Xue binder can be used to add and configuration information in this environment. See {@link
624*dc5640d1SHerbert Xue PrivateModule} for details.
625*dc5640d1SHerbert Xue
626*dc5640d1SHerbert Xue @return a binder that inherits configuration from this binder. Only exposed configuration on
627*dc5640d1SHerbert Xue      the returned binder will be visible to this binder.
628*dc5640d1SHerbert Xue @since 2.0]]>
629*dc5640d1SHerbert Xue      </doc>
630*dc5640d1SHerbert Xue    </method>
631*dc5640d1SHerbert Xue    <method name="requireExplicitBindings"
632*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
633*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
634*dc5640d1SHerbert Xue      deprecated="not deprecated">
635*dc5640d1SHerbert Xue      <doc>
636*dc5640d1SHerbert Xue      <![CDATA[Instructs the Injector that bindings must be listed in a Module in order to
637*dc5640d1SHerbert Xue be injected. Classes that are not explicitly bound in a module cannot be
638*dc5640d1SHerbert Xue injected. Bindings created through a linked binding
639*dc5640d1SHerbert Xue (<code>bind(Foo.class).to(FooImpl.class)</code>) are allowed, but the
640*dc5640d1SHerbert Xue implicit binding (<code>FooImpl</code>) cannot be directly injected unless
641*dc5640d1SHerbert Xue it is also explicitly bound (<code>bind(FooImpl.class)</code>).
642*dc5640d1SHerbert Xue <p>
643*dc5640d1SHerbert Xue Tools can still retrieve bindings for implicit bindings (bindings created
644*dc5640d1SHerbert Xue through a linked binding) if explicit bindings are required, however
645*dc5640d1SHerbert Xue {@link Binding#getProvider} will fail.
646*dc5640d1SHerbert Xue <p>
647*dc5640d1SHerbert Xue By default, explicit bindings are not required.
648*dc5640d1SHerbert Xue <p>
649*dc5640d1SHerbert Xue If a parent injector requires explicit bindings, then all child injectors
650*dc5640d1SHerbert Xue (and private modules within that injector) also require explicit bindings.
651*dc5640d1SHerbert Xue If a parent does not require explicit bindings, a child injector or private
652*dc5640d1SHerbert Xue module may optionally declare itself as requiring explicit bindings. If it
653*dc5640d1SHerbert Xue does, the behavior is limited only to that child or any grandchildren. No
654*dc5640d1SHerbert Xue siblings of the child will require explicit bindings.
655*dc5640d1SHerbert Xue <p>
656*dc5640d1SHerbert Xue In the absence of an explicit binding for the target, linked bindings in
657*dc5640d1SHerbert Xue child injectors create a binding for the target in the parent. Since this
658*dc5640d1SHerbert Xue behavior can be surprising, it causes an error instead if explicit bindings
659*dc5640d1SHerbert Xue are required. To avoid this error, add an explicit binding for the target,
660*dc5640d1SHerbert Xue either in the child or the parent.
661*dc5640d1SHerbert Xue
662*dc5640d1SHerbert Xue @since 3.0]]>
663*dc5640d1SHerbert Xue      </doc>
664*dc5640d1SHerbert Xue    </method>
665*dc5640d1SHerbert Xue    <method name="disableCircularProxies"
666*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
667*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
668*dc5640d1SHerbert Xue      deprecated="not deprecated">
669*dc5640d1SHerbert Xue      <doc>
670*dc5640d1SHerbert Xue      <![CDATA[Prevents Guice from injecting dependencies that form a cycle, unless broken by a
671*dc5640d1SHerbert Xue {@link Provider}. By default, circular dependencies are not disabled.
672*dc5640d1SHerbert Xue <p>
673*dc5640d1SHerbert Xue If a parent injector disables circular dependencies, then all child injectors (and private
674*dc5640d1SHerbert Xue modules within that injector) also disable circular dependencies. If a parent does not disable
675*dc5640d1SHerbert Xue circular dependencies, a child injector or private module may optionally declare itself as
676*dc5640d1SHerbert Xue disabling circular dependencies. If it does, the behavior is limited only to that child or any
677*dc5640d1SHerbert Xue grandchildren. No siblings of the child will disable circular dependencies.
678*dc5640d1SHerbert Xue
679*dc5640d1SHerbert Xue @since 3.0]]>
680*dc5640d1SHerbert Xue      </doc>
681*dc5640d1SHerbert Xue    </method>
682*dc5640d1SHerbert Xue    <method name="requireAtInjectOnConstructors"
683*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
684*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
685*dc5640d1SHerbert Xue      deprecated="not deprecated">
686*dc5640d1SHerbert Xue      <doc>
687*dc5640d1SHerbert Xue      <![CDATA[Requires that a {@literal @}{@link Inject} annotation exists on a constructor in order for
688*dc5640d1SHerbert Xue Guice to consider it an eligible injectable class. By default, Guice will inject classes that
689*dc5640d1SHerbert Xue have a no-args constructor if no {@literal @}{@link Inject} annotation exists on any
690*dc5640d1SHerbert Xue constructor.
691*dc5640d1SHerbert Xue <p>
692*dc5640d1SHerbert Xue If the class is bound using {@link LinkedBindingBuilder#toConstructor}, Guice will still inject
693*dc5640d1SHerbert Xue that constructor regardless of annotations.
694*dc5640d1SHerbert Xue
695*dc5640d1SHerbert Xue @since 4.0]]>
696*dc5640d1SHerbert Xue      </doc>
697*dc5640d1SHerbert Xue    </method>
698*dc5640d1SHerbert Xue    <method name="requireExactBindingAnnotations"
699*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
700*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
701*dc5640d1SHerbert Xue      deprecated="not deprecated">
702*dc5640d1SHerbert Xue      <doc>
703*dc5640d1SHerbert Xue      <![CDATA[Requires that Guice finds an exactly matching binding annotation.  This disables the
704*dc5640d1SHerbert Xue error-prone feature in Guice where it can substitute a binding for
705*dc5640d1SHerbert Xue <code>{@literal @}Named Foo</code> when attempting to inject
706*dc5640d1SHerbert Xue <code>{@literal @}Named("foo") Foo</code>.
707*dc5640d1SHerbert Xue
708*dc5640d1SHerbert Xue @since 4.0]]>
709*dc5640d1SHerbert Xue      </doc>
710*dc5640d1SHerbert Xue    </method>
711*dc5640d1SHerbert Xue    <method name="scanModulesForAnnotatedMethods"
712*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
713*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
714*dc5640d1SHerbert Xue      deprecated="not deprecated">
715*dc5640d1SHerbert Xue      <param name="scanner" type="com.google.inject.spi.ModuleAnnotatedMethodScanner"/>
716*dc5640d1SHerbert Xue      <doc>
717*dc5640d1SHerbert Xue      <![CDATA[Adds a scanner that will look in all installed modules for annotations the scanner can parse,
718*dc5640d1SHerbert Xue and binds them like {@literal @}Provides methods. Scanners apply to all modules installed in
719*dc5640d1SHerbert Xue the injector. Scanners installed in child injectors or private modules do not impact modules in
720*dc5640d1SHerbert Xue siblings or parents, however scanners installed in parents do apply to all child injectors and
721*dc5640d1SHerbert Xue private modules.
722*dc5640d1SHerbert Xue
723*dc5640d1SHerbert Xue @since 4.0]]>
724*dc5640d1SHerbert Xue      </doc>
725*dc5640d1SHerbert Xue    </method>
726*dc5640d1SHerbert Xue    <doc>
727*dc5640d1SHerbert Xue    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
728*dc5640d1SHerbert Xue used to create an {@link Injector}. Guice provides this object to your
729*dc5640d1SHerbert Xue application's {@link Module} implementors so they may each contribute
730*dc5640d1SHerbert Xue their own bindings and other registrations.
731*dc5640d1SHerbert Xue
732*dc5640d1SHerbert Xue <h3>The Guice Binding EDSL</h3>
733*dc5640d1SHerbert Xue
734*dc5640d1SHerbert Xue Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
735*dc5640d1SHerbert Xue create bindings simply and readably.  This approach is great for overall
736*dc5640d1SHerbert Xue usability, but it does come with a small cost: <b>it is difficult to
737*dc5640d1SHerbert Xue learn how to use the Binding EDSL by reading
738*dc5640d1SHerbert Xue method-level javadocs</b>.  Instead, you should consult the series of
739*dc5640d1SHerbert Xue examples below.  To save space, these examples omit the opening
740*dc5640d1SHerbert Xue {@code binder}, just as you will if your module extends
741*dc5640d1SHerbert Xue {@link AbstractModule}.
742*dc5640d1SHerbert Xue
743*dc5640d1SHerbert Xue <pre>
744*dc5640d1SHerbert Xue     bind(ServiceImpl.class);</pre>
745*dc5640d1SHerbert Xue
746*dc5640d1SHerbert Xue This statement does essentially nothing; it "binds the {@code ServiceImpl}
747*dc5640d1SHerbert Xue class to itself" and does not change Guice's default behavior.  You may still
748*dc5640d1SHerbert Xue want to use this if you prefer your {@link Module} class to serve as an
749*dc5640d1SHerbert Xue explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
750*dc5640d1SHerbert Xue Guice may be unable to validate a binding at injector creation time unless it
751*dc5640d1SHerbert Xue is given explicitly.
752*dc5640d1SHerbert Xue
753*dc5640d1SHerbert Xue <pre>
754*dc5640d1SHerbert Xue     bind(Service.class).to(ServiceImpl.class);</pre>
755*dc5640d1SHerbert Xue
756*dc5640d1SHerbert Xue Specifies that a request for a {@code Service} instance with no binding
757*dc5640d1SHerbert Xue annotations should be treated as if it were a request for a
758*dc5640d1SHerbert Xue {@code ServiceImpl} instance. This <i>overrides</i> the function of any
759*dc5640d1SHerbert Xue {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
760*dc5640d1SHerbert Xue annotations found on {@code Service}, since Guice will have already
761*dc5640d1SHerbert Xue "moved on" to {@code ServiceImpl} before it reaches the point when it starts
762*dc5640d1SHerbert Xue looking for these annotations.
763*dc5640d1SHerbert Xue
764*dc5640d1SHerbert Xue <pre>
765*dc5640d1SHerbert Xue     bind(Service.class).toProvider(ServiceProvider.class);</pre>
766*dc5640d1SHerbert Xue
767*dc5640d1SHerbert Xue In this example, {@code ServiceProvider} must extend or implement
768*dc5640d1SHerbert Xue {@code Provider<Service>}. This binding specifies that Guice should resolve
769*dc5640d1SHerbert Xue an unannotated injection request for {@code Service} by first resolving an
770*dc5640d1SHerbert Xue instance of {@code ServiceProvider} in the regular way, then calling
771*dc5640d1SHerbert Xue {@link Provider#get get()} on the resulting Provider instance to obtain the
772*dc5640d1SHerbert Xue {@code Service} instance.
773*dc5640d1SHerbert Xue
774*dc5640d1SHerbert Xue <p>The {@link Provider} you use here does not have to be a "factory"; that
775*dc5640d1SHerbert Xue is, a provider which always <i>creates</i> each instance it provides.
776*dc5640d1SHerbert Xue However, this is generally a good practice to follow.  You can then use
777*dc5640d1SHerbert Xue Guice's concept of {@link Scope scopes} to guide when creation should happen
778*dc5640d1SHerbert Xue -- "letting Guice work for you".
779*dc5640d1SHerbert Xue
780*dc5640d1SHerbert Xue <pre>
781*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
782*dc5640d1SHerbert Xue
783*dc5640d1SHerbert Xue Like the previous example, but only applies to injection requests that use
784*dc5640d1SHerbert Xue the binding annotation {@code @Red}.  If your module also includes bindings
785*dc5640d1SHerbert Xue for particular <i>values</i> of the {@code @Red} annotation (see below),
786*dc5640d1SHerbert Xue then this binding will serve as a "catch-all" for any values of {@code @Red}
787*dc5640d1SHerbert Xue that have no exact match in the bindings.
788*dc5640d1SHerbert Xue
789*dc5640d1SHerbert Xue <pre>
790*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Singleton.class);
791*dc5640d1SHerbert Xue     // or, alternatively
792*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
793*dc5640d1SHerbert Xue
794*dc5640d1SHerbert Xue Either of these statements places the {@code ServiceImpl} class into
795*dc5640d1SHerbert Xue singleton scope.  Guice will create only one instance of {@code ServiceImpl}
796*dc5640d1SHerbert Xue and will reuse it for all injection requests of this type.  Note that it is
797*dc5640d1SHerbert Xue still possible to bind another instance of {@code ServiceImpl} if the second
798*dc5640d1SHerbert Xue binding is qualified by an annotation as in the previous example.  Guice is
799*dc5640d1SHerbert Xue not overly concerned with <i>preventing</i> you from creating multiple
800*dc5640d1SHerbert Xue instances of your "singletons", only with <i>enabling</i> your application to
801*dc5640d1SHerbert Xue share only one instance if that's all you tell Guice you need.
802*dc5640d1SHerbert Xue
803*dc5640d1SHerbert Xue <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
804*dc5640d1SHerbert Xue was specified with an annotation on the {@code ServiceImpl} class.
805*dc5640d1SHerbert Xue
806*dc5640d1SHerbert Xue <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
807*dc5640d1SHerbert Xue servlet-specific scopes available in
808*dc5640d1SHerbert Xue {@code com.google.inject.servlet.ServletScopes}, and your Modules can
809*dc5640d1SHerbert Xue contribute their own custom scopes for use here as well.
810*dc5640d1SHerbert Xue
811*dc5640d1SHerbert Xue <pre>
812*dc5640d1SHerbert Xue     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
813*dc5640d1SHerbert Xue         .to(CreditCardPaymentService.class);</pre>
814*dc5640d1SHerbert Xue
815*dc5640d1SHerbert Xue This admittedly odd construct is the way to bind a parameterized type. It
816*dc5640d1SHerbert Xue tells Guice how to honor an injection request for an element of type
817*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>}. The class
818*dc5640d1SHerbert Xue {@code CreditCardPaymentService} must implement the
819*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
820*dc5640d1SHerbert Xue inject a generic type, such as {@code Set<E>}; all type parameters must be
821*dc5640d1SHerbert Xue fully specified.
822*dc5640d1SHerbert Xue
823*dc5640d1SHerbert Xue <pre>
824*dc5640d1SHerbert Xue     bind(Service.class).toInstance(new ServiceImpl());
825*dc5640d1SHerbert Xue     // or, alternatively
826*dc5640d1SHerbert Xue     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
827*dc5640d1SHerbert Xue
828*dc5640d1SHerbert Xue In this example, your module itself, <i>not Guice</i>, takes responsibility
829*dc5640d1SHerbert Xue for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
830*dc5640d1SHerbert Xue this single instance to fulfill all {@code Service} injection requests.  When
831*dc5640d1SHerbert Xue the {@link Injector} is created, it will automatically perform field
832*dc5640d1SHerbert Xue and method injection for this instance, but any injectable constructor on
833*dc5640d1SHerbert Xue {@code ServiceImpl} is simply ignored.  Note that using this approach results
834*dc5640d1SHerbert Xue in "eager loading" behavior that you can't control.
835*dc5640d1SHerbert Xue
836*dc5640d1SHerbert Xue <pre>
837*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
838*dc5640d1SHerbert Xue
839*dc5640d1SHerbert Xue Sets up a constant binding. Constant injections must always be annotated.
840*dc5640d1SHerbert Xue When a constant binding's value is a string, it is eligile for conversion to
841*dc5640d1SHerbert Xue all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
842*dc5640d1SHerbert Xue {@link Class#forName class literals}. Conversions for other types can be
843*dc5640d1SHerbert Xue configured using {@link #convertToTypes(Matcher, TypeConverter)
844*dc5640d1SHerbert Xue convertToTypes()}.
845*dc5640d1SHerbert Xue
846*dc5640d1SHerbert Xue <pre>
847*dc5640d1SHerbert Xue   {@literal @}Color("red") Color red; // A member variable (field)
848*dc5640d1SHerbert Xue    . . .
849*dc5640d1SHerbert Xue     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
850*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
851*dc5640d1SHerbert Xue
852*dc5640d1SHerbert Xue If your binding annotation has parameters you can apply different bindings to
853*dc5640d1SHerbert Xue different specific values of your annotation.  Getting your hands on the
854*dc5640d1SHerbert Xue right instance of the annotation is a bit of a pain -- one approach, shown
855*dc5640d1SHerbert Xue above, is to apply a prototype annotation to a field in your module class, so
856*dc5640d1SHerbert Xue that you can read this annotation instance and give it to Guice.
857*dc5640d1SHerbert Xue
858*dc5640d1SHerbert Xue <pre>
859*dc5640d1SHerbert Xue     bind(Service.class)
860*dc5640d1SHerbert Xue         .annotatedWith(Names.named("blue"))
861*dc5640d1SHerbert Xue         .to(BlueService.class);</pre>
862*dc5640d1SHerbert Xue
863*dc5640d1SHerbert Xue Differentiating by names is a common enough use case that we provided a
864*dc5640d1SHerbert Xue standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
865*dc5640d1SHerbert Xue Guice's library support, binding by name is quite easier than in the
866*dc5640d1SHerbert Xue arbitrary binding annotation case we just saw.  However, remember that these
867*dc5640d1SHerbert Xue names will live in a single flat namespace with all the other names used in
868*dc5640d1SHerbert Xue your application.
869*dc5640d1SHerbert Xue
870*dc5640d1SHerbert Xue <pre>
871*dc5640d1SHerbert Xue     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
872*dc5640d1SHerbert Xue     bind(ServiceImpl.class)
873*dc5640d1SHerbert Xue         .toConstructor(loneCtor);</pre>
874*dc5640d1SHerbert Xue
875*dc5640d1SHerbert Xue In this example, we directly tell Guice which constructor to use in a concrete
876*dc5640d1SHerbert Xue class implementation. It means that we do not need to place {@literal @}Inject
877*dc5640d1SHerbert Xue on any of the constructors and that Guice treats the provided constructor as though
878*dc5640d1SHerbert Xue it were annotated so. It is useful for cases where you cannot modify existing
879*dc5640d1SHerbert Xue classes and is a bit simpler than using a {@link Provider}.
880*dc5640d1SHerbert Xue
881*dc5640d1SHerbert Xue <p>The above list of examples is far from exhaustive.  If you can think of
882*dc5640d1SHerbert Xue how the concepts of one example might coexist with the concepts from another,
883*dc5640d1SHerbert Xue you can most likely weave the two together.  If the two concepts make no
884*dc5640d1SHerbert Xue sense with each other, you most likely won't be able to do it.  In a few
885*dc5640d1SHerbert Xue cases Guice will let something bogus slip by, and will then inform you of
886*dc5640d1SHerbert Xue the problems at runtime, as soon as you try to create your Injector.
887*dc5640d1SHerbert Xue
888*dc5640d1SHerbert Xue <p>The other methods of Binder such as {@link #bindScope},
889*dc5640d1SHerbert Xue {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
890*dc5640d1SHerbert Xue {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
891*dc5640d1SHerbert Xue you can learn how to use these in the usual way, from the method
892*dc5640d1SHerbert Xue documentation.
893*dc5640d1SHerbert Xue
894*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
895*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
896*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)]]>
897*dc5640d1SHerbert Xue    </doc>
898*dc5640d1SHerbert Xue  </interface>
899*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binder -->
900*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Binding -->
901*dc5640d1SHerbert Xue  <interface name="Binding"    abstract="true"
902*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
903*dc5640d1SHerbert Xue    deprecated="not deprecated">
904*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
905*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
906*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
907*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
908*dc5640d1SHerbert Xue      deprecated="not deprecated">
909*dc5640d1SHerbert Xue      <doc>
910*dc5640d1SHerbert Xue      <![CDATA[Returns the key for this binding.]]>
911*dc5640d1SHerbert Xue      </doc>
912*dc5640d1SHerbert Xue    </method>
913*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
914*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
915*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
916*dc5640d1SHerbert Xue      deprecated="not deprecated">
917*dc5640d1SHerbert Xue      <doc>
918*dc5640d1SHerbert Xue      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
919*dc5640d1SHerbert Xue binding.
920*dc5640d1SHerbert Xue
921*dc5640d1SHerbert Xue @throws UnsupportedOperationException when invoked on a {@link Binding}
922*dc5640d1SHerbert Xue      created via {@link com.google.inject.spi.Elements#getElements}. This
923*dc5640d1SHerbert Xue      method is only supported on {@link Binding}s returned from an injector.]]>
924*dc5640d1SHerbert Xue      </doc>
925*dc5640d1SHerbert Xue    </method>
926*dc5640d1SHerbert Xue    <method name="acceptTargetVisitor" return="V"
927*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
928*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
929*dc5640d1SHerbert Xue      deprecated="not deprecated">
930*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
931*dc5640d1SHerbert Xue      <doc>
932*dc5640d1SHerbert Xue      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
933*dc5640d1SHerbert Xue
934*dc5640d1SHerbert Xue @param visitor to call back on
935*dc5640d1SHerbert Xue @since 2.0]]>
936*dc5640d1SHerbert Xue      </doc>
937*dc5640d1SHerbert Xue    </method>
938*dc5640d1SHerbert Xue    <method name="acceptScopingVisitor" return="V"
939*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
940*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
941*dc5640d1SHerbert Xue      deprecated="not deprecated">
942*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
943*dc5640d1SHerbert Xue      <doc>
944*dc5640d1SHerbert Xue      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
945*dc5640d1SHerbert Xue
946*dc5640d1SHerbert Xue @param visitor to call back on
947*dc5640d1SHerbert Xue @since 2.0]]>
948*dc5640d1SHerbert Xue      </doc>
949*dc5640d1SHerbert Xue    </method>
950*dc5640d1SHerbert Xue    <doc>
951*dc5640d1SHerbert Xue    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
952*dc5640d1SHerbert Xue type. This interface is part of the introspection API and is intended primarily for use by
953*dc5640d1SHerbert Xue tools.
954*dc5640d1SHerbert Xue
955*dc5640d1SHerbert Xue <p>Bindings are created in several ways:
956*dc5640d1SHerbert Xue <ul>
957*dc5640d1SHerbert Xue     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
958*dc5640d1SHerbert Xue         statements:
959*dc5640d1SHerbert Xue <pre>
960*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
961*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
962*dc5640d1SHerbert Xue     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
963*dc5640d1SHerbert Xue         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
964*dc5640d1SHerbert Xue         default constructor.</li>
965*dc5640d1SHerbert Xue     <li>By converting a bound instance to a different type.</li>
966*dc5640d1SHerbert Xue     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
967*dc5640d1SHerbert Xue </ul>
968*dc5640d1SHerbert Xue
969*dc5640d1SHerbert Xue
970*dc5640d1SHerbert Xue <p>They exist on both modules and on injectors, and their behaviour is different for each:
971*dc5640d1SHerbert Xue <ul>
972*dc5640d1SHerbert Xue     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
973*dc5640d1SHerbert Xue         This is because the applicable scopes and interceptors may not be known until an injector
974*dc5640d1SHerbert Xue         is created. From a tool's perspective, module bindings are like the injector's source
975*dc5640d1SHerbert Xue         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
976*dc5640d1SHerbert Xue     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
977*dc5640d1SHerbert Xue         instances. From a tools' perspective, injector bindings are like reflection for an
978*dc5640d1SHerbert Xue         injector. They have full runtime information, including the complete graph of injections
979*dc5640d1SHerbert Xue         necessary to satisfy a binding.</li>
980*dc5640d1SHerbert Xue </ul>
981*dc5640d1SHerbert Xue
982*dc5640d1SHerbert Xue @param <T> the bound type. The injected is always assignable to this type.
983*dc5640d1SHerbert Xue
984*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
985*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
986*dc5640d1SHerbert Xue    </doc>
987*dc5640d1SHerbert Xue  </interface>
988*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binding -->
989*dc5640d1SHerbert Xue  <!-- start class com.google.inject.BindingAnnotation -->
990*dc5640d1SHerbert Xue  <class name="BindingAnnotation"    abstract="true"
991*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
992*dc5640d1SHerbert Xue    deprecated="not deprecated">
993*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
994*dc5640d1SHerbert Xue    <doc>
995*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
996*dc5640d1SHerbert Xue may apply to a single injection point. You must also annotate binder
997*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
998*dc5640d1SHerbert Xue
999*dc5640d1SHerbert Xue <pre>
1000*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
1001*dc5640d1SHerbert Xue   {@code @}Target({ FIELD, PARAMETER, METHOD })
1002*dc5640d1SHerbert Xue   {@code @}BindingAnnotation
1003*dc5640d1SHerbert Xue   public {@code @}interface Transactional {}
1004*dc5640d1SHerbert Xue </pre>
1005*dc5640d1SHerbert Xue
1006*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1007*dc5640d1SHerbert Xue    </doc>
1008*dc5640d1SHerbert Xue  </class>
1009*dc5640d1SHerbert Xue  <!-- end class com.google.inject.BindingAnnotation -->
1010*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ConfigurationException -->
1011*dc5640d1SHerbert Xue  <class name="ConfigurationException" extends="java.lang.RuntimeException"
1012*dc5640d1SHerbert Xue    abstract="false"
1013*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1014*dc5640d1SHerbert Xue    deprecated="not deprecated">
1015*dc5640d1SHerbert Xue    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
1016*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1017*dc5640d1SHerbert Xue      deprecated="not deprecated">
1018*dc5640d1SHerbert Xue      <doc>
1019*dc5640d1SHerbert Xue      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
1020*dc5640d1SHerbert Xue      </doc>
1021*dc5640d1SHerbert Xue    </constructor>
1022*dc5640d1SHerbert Xue    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
1023*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1024*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1025*dc5640d1SHerbert Xue      deprecated="not deprecated">
1026*dc5640d1SHerbert Xue      <param name="partialValue" type="java.lang.Object"/>
1027*dc5640d1SHerbert Xue      <doc>
1028*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
1029*dc5640d1SHerbert Xue      </doc>
1030*dc5640d1SHerbert Xue    </method>
1031*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1032*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1033*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1034*dc5640d1SHerbert Xue      deprecated="not deprecated">
1035*dc5640d1SHerbert Xue      <doc>
1036*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
1037*dc5640d1SHerbert Xue      </doc>
1038*dc5640d1SHerbert Xue    </method>
1039*dc5640d1SHerbert Xue    <method name="getPartialValue" return="E"
1040*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1041*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1042*dc5640d1SHerbert Xue      deprecated="not deprecated">
1043*dc5640d1SHerbert Xue      <doc>
1044*dc5640d1SHerbert Xue      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
1045*dc5640d1SHerbert Xue this while collecting additional configuration problems.
1046*dc5640d1SHerbert Xue
1047*dc5640d1SHerbert Xue @return the partial value, or {@code null} if none was set. The type of the partial value is
1048*dc5640d1SHerbert Xue      specified by the throwing method.]]>
1049*dc5640d1SHerbert Xue      </doc>
1050*dc5640d1SHerbert Xue    </method>
1051*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
1052*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1053*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1054*dc5640d1SHerbert Xue      deprecated="not deprecated">
1055*dc5640d1SHerbert Xue    </method>
1056*dc5640d1SHerbert Xue    <doc>
1057*dc5640d1SHerbert Xue    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
1058*dc5640d1SHerbert Xue scope is found. Clients should catch this exception, log it, and stop execution.
1059*dc5640d1SHerbert Xue
1060*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1061*dc5640d1SHerbert Xue @since 2.0]]>
1062*dc5640d1SHerbert Xue    </doc>
1063*dc5640d1SHerbert Xue  </class>
1064*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ConfigurationException -->
1065*dc5640d1SHerbert Xue  <!-- start class com.google.inject.CreationException -->
1066*dc5640d1SHerbert Xue  <class name="CreationException" extends="java.lang.RuntimeException"
1067*dc5640d1SHerbert Xue    abstract="false"
1068*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1069*dc5640d1SHerbert Xue    deprecated="not deprecated">
1070*dc5640d1SHerbert Xue    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1071*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1072*dc5640d1SHerbert Xue      deprecated="not deprecated">
1073*dc5640d1SHerbert Xue      <doc>
1074*dc5640d1SHerbert Xue      <![CDATA[Creates a CreationException containing {@code messages}.]]>
1075*dc5640d1SHerbert Xue      </doc>
1076*dc5640d1SHerbert Xue    </constructor>
1077*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1078*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1079*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1080*dc5640d1SHerbert Xue      deprecated="not deprecated">
1081*dc5640d1SHerbert Xue      <doc>
1082*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
1083*dc5640d1SHerbert Xue      </doc>
1084*dc5640d1SHerbert Xue    </method>
1085*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
1086*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1087*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1088*dc5640d1SHerbert Xue      deprecated="not deprecated">
1089*dc5640d1SHerbert Xue    </method>
1090*dc5640d1SHerbert Xue    <doc>
1091*dc5640d1SHerbert Xue    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1092*dc5640d1SHerbert Xue errors. Clients should catch this exception, log it, and stop execution.
1093*dc5640d1SHerbert Xue
1094*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1095*dc5640d1SHerbert Xue    </doc>
1096*dc5640d1SHerbert Xue  </class>
1097*dc5640d1SHerbert Xue  <!-- end class com.google.inject.CreationException -->
1098*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Exposed -->
1099*dc5640d1SHerbert Xue  <class name="Exposed"    abstract="true"
1100*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1101*dc5640d1SHerbert Xue    deprecated="not deprecated">
1102*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1103*dc5640d1SHerbert Xue    <doc>
1104*dc5640d1SHerbert Xue    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1105*dc5640d1SHerbert Xue private module to indicate that the provided binding is exposed.
1106*dc5640d1SHerbert Xue
1107*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1108*dc5640d1SHerbert Xue @since 2.0]]>
1109*dc5640d1SHerbert Xue    </doc>
1110*dc5640d1SHerbert Xue  </class>
1111*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Exposed -->
1112*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Guice -->
1113*dc5640d1SHerbert Xue  <class name="Guice" extends="java.lang.Object"
1114*dc5640d1SHerbert Xue    abstract="false"
1115*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1116*dc5640d1SHerbert Xue    deprecated="not deprecated">
1117*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1118*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1119*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1120*dc5640d1SHerbert Xue      deprecated="not deprecated">
1121*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1122*dc5640d1SHerbert Xue      <doc>
1123*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1124*dc5640d1SHerbert Xue calling {@link #createInjector(Stage, Module...)} with Stage.DEVELOPMENT.
1125*dc5640d1SHerbert Xue
1126*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1127*dc5640d1SHerbert Xue     construction]]>
1128*dc5640d1SHerbert Xue      </doc>
1129*dc5640d1SHerbert Xue    </method>
1130*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1131*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1132*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1133*dc5640d1SHerbert Xue      deprecated="not deprecated">
1134*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1135*dc5640d1SHerbert Xue      <doc>
1136*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1137*dc5640d1SHerbert Xue calling {@link #createInjector(Stage, Iterable)} with Stage.DEVELOPMENT.
1138*dc5640d1SHerbert Xue
1139*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1140*dc5640d1SHerbert Xue     creation]]>
1141*dc5640d1SHerbert Xue      </doc>
1142*dc5640d1SHerbert Xue    </method>
1143*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1144*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1145*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1146*dc5640d1SHerbert Xue      deprecated="not deprecated">
1147*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1148*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1149*dc5640d1SHerbert Xue      <doc>
1150*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1151*dc5640d1SHerbert Xue stage.
1152*dc5640d1SHerbert Xue
1153*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1154*dc5640d1SHerbert Xue     creation.]]>
1155*dc5640d1SHerbert Xue      </doc>
1156*dc5640d1SHerbert Xue    </method>
1157*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1158*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1159*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1160*dc5640d1SHerbert Xue      deprecated="not deprecated">
1161*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1162*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1163*dc5640d1SHerbert Xue      <doc>
1164*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1165*dc5640d1SHerbert Xue stage.
1166*dc5640d1SHerbert Xue
1167*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1168*dc5640d1SHerbert Xue     construction]]>
1169*dc5640d1SHerbert Xue      </doc>
1170*dc5640d1SHerbert Xue    </method>
1171*dc5640d1SHerbert Xue    <doc>
1172*dc5640d1SHerbert Xue    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1173*dc5640d1SHerbert Xue {@link Module}s.
1174*dc5640d1SHerbert Xue
1175*dc5640d1SHerbert Xue <p>Guice supports a model of development that draws clear boundaries between
1176*dc5640d1SHerbert Xue APIs, Implementations of these APIs, Modules which configure these
1177*dc5640d1SHerbert Xue implementations, and finally Applications which consist of a collection of
1178*dc5640d1SHerbert Xue Modules. It is the Application, which typically defines your {@code main()}
1179*dc5640d1SHerbert Xue method, that bootstraps the Guice Injector using the {@code Guice} class, as
1180*dc5640d1SHerbert Xue in this example:
1181*dc5640d1SHerbert Xue <pre>
1182*dc5640d1SHerbert Xue     public class FooApplication {
1183*dc5640d1SHerbert Xue       public static void main(String[] args) {
1184*dc5640d1SHerbert Xue         Injector injector = Guice.createInjector(
1185*dc5640d1SHerbert Xue             new ModuleA(),
1186*dc5640d1SHerbert Xue             new ModuleB(),
1187*dc5640d1SHerbert Xue             . . .
1188*dc5640d1SHerbert Xue             new FooApplicationFlagsModule(args)
1189*dc5640d1SHerbert Xue         );
1190*dc5640d1SHerbert Xue
1191*dc5640d1SHerbert Xue         // Now just bootstrap the application and you're done
1192*dc5640d1SHerbert Xue         FooStarter starter = injector.getInstance(FooStarter.class);
1193*dc5640d1SHerbert Xue         starter.runApplication();
1194*dc5640d1SHerbert Xue       }
1195*dc5640d1SHerbert Xue     }
1196*dc5640d1SHerbert Xue </pre>]]>
1197*dc5640d1SHerbert Xue    </doc>
1198*dc5640d1SHerbert Xue  </class>
1199*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Guice -->
1200*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ImplementedBy -->
1201*dc5640d1SHerbert Xue  <class name="ImplementedBy"    abstract="true"
1202*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1203*dc5640d1SHerbert Xue    deprecated="not deprecated">
1204*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1205*dc5640d1SHerbert Xue    <doc>
1206*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default implementation of a type.
1207*dc5640d1SHerbert Xue
1208*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1209*dc5640d1SHerbert Xue    </doc>
1210*dc5640d1SHerbert Xue  </class>
1211*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ImplementedBy -->
1212*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Inject -->
1213*dc5640d1SHerbert Xue  <class name="Inject"    abstract="true"
1214*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1215*dc5640d1SHerbert Xue    deprecated="not deprecated">
1216*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1217*dc5640d1SHerbert Xue    <doc>
1218*dc5640d1SHerbert Xue    <![CDATA[Annotates members of your implementation class (constructors, methods
1219*dc5640d1SHerbert Xue and fields) into which the {@link Injector} should inject values.
1220*dc5640d1SHerbert Xue The Injector fulfills injection requests for:
1221*dc5640d1SHerbert Xue
1222*dc5640d1SHerbert Xue <ul>
1223*dc5640d1SHerbert Xue <li>Every instance it constructs. The class being constructed must have
1224*dc5640d1SHerbert Xue exactly one of its constructors marked with {@code @Inject} or must have a
1225*dc5640d1SHerbert Xue constructor taking no parameters. The Injector then proceeds to perform
1226*dc5640d1SHerbert Xue field and method injections.
1227*dc5640d1SHerbert Xue
1228*dc5640d1SHerbert Xue <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1229*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1230*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(javax.inject.Provider)}.
1231*dc5640d1SHerbert Xue In this case all constructors are, of course, ignored.
1232*dc5640d1SHerbert Xue
1233*dc5640d1SHerbert Xue <li>Static fields and methods of classes which any {@link Module} has
1234*dc5640d1SHerbert Xue specifically requested static injection for, using
1235*dc5640d1SHerbert Xue {@link Binder#requestStaticInjection}.
1236*dc5640d1SHerbert Xue </ul>
1237*dc5640d1SHerbert Xue
1238*dc5640d1SHerbert Xue In all cases, a member can be injected regardless of its Java access
1239*dc5640d1SHerbert Xue specifier (private, default, protected, public).
1240*dc5640d1SHerbert Xue
1241*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1242*dc5640d1SHerbert Xue    </doc>
1243*dc5640d1SHerbert Xue  </class>
1244*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Inject -->
1245*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Injector -->
1246*dc5640d1SHerbert Xue  <interface name="Injector"    abstract="true"
1247*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1248*dc5640d1SHerbert Xue    deprecated="not deprecated">
1249*dc5640d1SHerbert Xue    <method name="injectMembers"
1250*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1251*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1252*dc5640d1SHerbert Xue      deprecated="not deprecated">
1253*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
1254*dc5640d1SHerbert Xue      <doc>
1255*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1256*dc5640d1SHerbert Xue absence of an injectable constructor.
1257*dc5640d1SHerbert Xue
1258*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1259*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1260*dc5640d1SHerbert Xue you, you'll never need to use this method.
1261*dc5640d1SHerbert Xue
1262*dc5640d1SHerbert Xue @param instance to inject members on
1263*dc5640d1SHerbert Xue
1264*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1265*dc5640d1SHerbert Xue  run time]]>
1266*dc5640d1SHerbert Xue      </doc>
1267*dc5640d1SHerbert Xue    </method>
1268*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1269*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1270*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1271*dc5640d1SHerbert Xue      deprecated="not deprecated">
1272*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1273*dc5640d1SHerbert Xue      <doc>
1274*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1275*dc5640d1SHerbert Xue of the given type {@code T}.
1276*dc5640d1SHerbert Xue
1277*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for
1278*dc5640d1SHerbert Xue @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1279*dc5640d1SHerbert Xue  detection
1280*dc5640d1SHerbert Xue @since 2.0]]>
1281*dc5640d1SHerbert Xue      </doc>
1282*dc5640d1SHerbert Xue    </method>
1283*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1284*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1285*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1286*dc5640d1SHerbert Xue      deprecated="not deprecated">
1287*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1288*dc5640d1SHerbert Xue      <doc>
1289*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1290*dc5640d1SHerbert Xue of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1291*dc5640d1SHerbert Xue instead to get increased up front error detection.
1292*dc5640d1SHerbert Xue
1293*dc5640d1SHerbert Xue @param type type to get members injector for
1294*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1295*dc5640d1SHerbert Xue  detection
1296*dc5640d1SHerbert Xue @since 2.0]]>
1297*dc5640d1SHerbert Xue      </doc>
1298*dc5640d1SHerbert Xue    </method>
1299*dc5640d1SHerbert Xue    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1300*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1301*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1302*dc5640d1SHerbert Xue      deprecated="not deprecated">
1303*dc5640d1SHerbert Xue      <doc>
1304*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1305*dc5640d1SHerbert Xue
1306*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1307*dc5640d1SHerbert Xue injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1308*dc5640d1SHerbert Xue its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1309*dc5640d1SHerbert Xue which bindings appear in user Modules.
1310*dc5640d1SHerbert Xue
1311*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1312*dc5640d1SHerbert Xue      </doc>
1313*dc5640d1SHerbert Xue    </method>
1314*dc5640d1SHerbert Xue    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1315*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1316*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1317*dc5640d1SHerbert Xue      deprecated="not deprecated">
1318*dc5640d1SHerbert Xue      <doc>
1319*dc5640d1SHerbert Xue      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1320*dc5640d1SHerbert Xue just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1321*dc5640d1SHerbert Xue present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1322*dc5640d1SHerbert Xue additional just-in-time bindings.
1323*dc5640d1SHerbert Xue
1324*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1325*dc5640d1SHerbert Xue injector}, should one exist.
1326*dc5640d1SHerbert Xue
1327*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1328*dc5640d1SHerbert Xue
1329*dc5640d1SHerbert Xue @since 3.0]]>
1330*dc5640d1SHerbert Xue      </doc>
1331*dc5640d1SHerbert Xue    </method>
1332*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1333*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1334*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1335*dc5640d1SHerbert Xue      deprecated="not deprecated">
1336*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1337*dc5640d1SHerbert Xue      <doc>
1338*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1339*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1340*dc5640d1SHerbert Xue be created if necessary.
1341*dc5640d1SHerbert Xue
1342*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1343*dc5640d1SHerbert Xue
1344*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.]]>
1345*dc5640d1SHerbert Xue      </doc>
1346*dc5640d1SHerbert Xue    </method>
1347*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1348*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1349*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1350*dc5640d1SHerbert Xue      deprecated="not deprecated">
1351*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1352*dc5640d1SHerbert Xue      <doc>
1353*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1354*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1355*dc5640d1SHerbert Xue be created if necessary.
1356*dc5640d1SHerbert Xue
1357*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1358*dc5640d1SHerbert Xue
1359*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.
1360*dc5640d1SHerbert Xue @since 2.0]]>
1361*dc5640d1SHerbert Xue      </doc>
1362*dc5640d1SHerbert Xue    </method>
1363*dc5640d1SHerbert Xue    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1364*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1365*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1366*dc5640d1SHerbert Xue      deprecated="not deprecated">
1367*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1368*dc5640d1SHerbert Xue      <doc>
1369*dc5640d1SHerbert Xue      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1370*dc5640d1SHerbert Xue {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1371*dc5640d1SHerbert Xue for keys that aren't bound.
1372*dc5640d1SHerbert Xue
1373*dc5640d1SHerbert Xue <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1374*dc5640d1SHerbert Xue
1375*dc5640d1SHerbert Xue @since 3.0]]>
1376*dc5640d1SHerbert Xue      </doc>
1377*dc5640d1SHerbert Xue    </method>
1378*dc5640d1SHerbert Xue    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1379*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1380*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1381*dc5640d1SHerbert Xue      deprecated="not deprecated">
1382*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1383*dc5640d1SHerbert Xue      <doc>
1384*dc5640d1SHerbert Xue      <![CDATA[Returns all explicit bindings for {@code type}.
1385*dc5640d1SHerbert Xue
1386*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1387*dc5640d1SHerbert Xue      </doc>
1388*dc5640d1SHerbert Xue    </method>
1389*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1390*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1391*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1392*dc5640d1SHerbert Xue      deprecated="not deprecated">
1393*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1394*dc5640d1SHerbert Xue      <doc>
1395*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1396*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1397*dc5640d1SHerbert Xue
1398*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1399*dc5640d1SHerbert Xue @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1400*dc5640d1SHerbert Xue      </doc>
1401*dc5640d1SHerbert Xue    </method>
1402*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1403*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1404*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1405*dc5640d1SHerbert Xue      deprecated="not deprecated">
1406*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1407*dc5640d1SHerbert Xue      <doc>
1408*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1409*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1410*dc5640d1SHerbert Xue
1411*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1412*dc5640d1SHerbert Xue @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1413*dc5640d1SHerbert Xue      </doc>
1414*dc5640d1SHerbert Xue    </method>
1415*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1416*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1417*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1418*dc5640d1SHerbert Xue      deprecated="not deprecated">
1419*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1420*dc5640d1SHerbert Xue      <doc>
1421*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1422*dc5640d1SHerbert Xue getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1423*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1424*dc5640d1SHerbert Xue
1425*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1426*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1427*dc5640d1SHerbert Xue      </doc>
1428*dc5640d1SHerbert Xue    </method>
1429*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1430*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1431*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1432*dc5640d1SHerbert Xue      deprecated="not deprecated">
1433*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1434*dc5640d1SHerbert Xue      <doc>
1435*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1436*dc5640d1SHerbert Xue getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1437*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1438*dc5640d1SHerbert Xue
1439*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1440*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1441*dc5640d1SHerbert Xue      </doc>
1442*dc5640d1SHerbert Xue    </method>
1443*dc5640d1SHerbert Xue    <method name="getParent" return="com.google.inject.Injector"
1444*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1445*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1446*dc5640d1SHerbert Xue      deprecated="not deprecated">
1447*dc5640d1SHerbert Xue      <doc>
1448*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1449*dc5640d1SHerbert Xue
1450*dc5640d1SHerbert Xue @since 2.0]]>
1451*dc5640d1SHerbert Xue      </doc>
1452*dc5640d1SHerbert Xue    </method>
1453*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1454*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1455*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1456*dc5640d1SHerbert Xue      deprecated="not deprecated">
1457*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1458*dc5640d1SHerbert Xue      <doc>
1459*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1460*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1461*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1462*dc5640d1SHerbert Xue
1463*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1464*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1465*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1466*dc5640d1SHerbert Xue injections in just-in-time bindings (created in the parent injector) may be silently
1467*dc5640d1SHerbert Xue ignored if the optional dependencies are from the child injector.
1468*dc5640d1SHerbert Xue
1469*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1470*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1471*dc5640d1SHerbert Xue injector to itself.
1472*dc5640d1SHerbert Xue
1473*dc5640d1SHerbert Xue @since 2.0]]>
1474*dc5640d1SHerbert Xue      </doc>
1475*dc5640d1SHerbert Xue    </method>
1476*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1477*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1478*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1479*dc5640d1SHerbert Xue      deprecated="not deprecated">
1480*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1481*dc5640d1SHerbert Xue      <doc>
1482*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1483*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1484*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1485*dc5640d1SHerbert Xue
1486*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1487*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1488*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.
1489*dc5640d1SHerbert Xue
1490*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1491*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1492*dc5640d1SHerbert Xue injector to itself.
1493*dc5640d1SHerbert Xue
1494*dc5640d1SHerbert Xue @since 2.0]]>
1495*dc5640d1SHerbert Xue      </doc>
1496*dc5640d1SHerbert Xue    </method>
1497*dc5640d1SHerbert Xue    <method name="getScopeBindings" return="java.util.Map&lt;java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;, com.google.inject.Scope&gt;"
1498*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1499*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1500*dc5640d1SHerbert Xue      deprecated="not deprecated">
1501*dc5640d1SHerbert Xue      <doc>
1502*dc5640d1SHerbert Xue      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1503*dc5640d1SHerbert Xue like {@code Singleton.class}, and the values are scope instances, such as {@code
1504*dc5640d1SHerbert Xue Scopes.SINGLETON}. The returned map is immutable.
1505*dc5640d1SHerbert Xue
1506*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1507*dc5640d1SHerbert Xue
1508*dc5640d1SHerbert Xue @since 3.0]]>
1509*dc5640d1SHerbert Xue      </doc>
1510*dc5640d1SHerbert Xue    </method>
1511*dc5640d1SHerbert Xue    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1512*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1513*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1514*dc5640d1SHerbert Xue      deprecated="not deprecated">
1515*dc5640d1SHerbert Xue      <doc>
1516*dc5640d1SHerbert Xue      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1517*dc5640d1SHerbert Xue immutable.
1518*dc5640d1SHerbert Xue
1519*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1520*dc5640d1SHerbert Xue
1521*dc5640d1SHerbert Xue @since 3.0]]>
1522*dc5640d1SHerbert Xue      </doc>
1523*dc5640d1SHerbert Xue    </method>
1524*dc5640d1SHerbert Xue    <doc>
1525*dc5640d1SHerbert Xue    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1526*dc5640d1SHerbert Xue for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1527*dc5640d1SHerbert Xue interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1528*dc5640d1SHerbert Xue injection from its cousin, the service locator pattern.
1529*dc5640d1SHerbert Xue
1530*dc5640d1SHerbert Xue <p>Contains several default bindings:
1531*dc5640d1SHerbert Xue
1532*dc5640d1SHerbert Xue <ul>
1533*dc5640d1SHerbert Xue <li>This {@link Injector} instance itself
1534*dc5640d1SHerbert Xue <li>A {@code Provider<T>} for each binding of type {@code T}
1535*dc5640d1SHerbert Xue <li>The {@link java.util.logging.Logger} for the class being injected
1536*dc5640d1SHerbert Xue <li>The {@link Stage} in which the Injector was created
1537*dc5640d1SHerbert Xue </ul>
1538*dc5640d1SHerbert Xue
1539*dc5640d1SHerbert Xue Injectors are created using the facade class {@link Guice}.
1540*dc5640d1SHerbert Xue
1541*dc5640d1SHerbert Xue <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1542*dc5640d1SHerbert Xue already-constructed instances. This can be used to interoperate with objects created by other
1543*dc5640d1SHerbert Xue frameworks or services.
1544*dc5640d1SHerbert Xue
1545*dc5640d1SHerbert Xue <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1546*dc5640d1SHerbert Xue the configuration of their parent injectors, but the converse does not hold.
1547*dc5640d1SHerbert Xue
1548*dc5640d1SHerbert Xue <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1549*dc5640d1SHerbert Xue enables tools and extensions to operate on an injector reflectively.
1550*dc5640d1SHerbert Xue
1551*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1552*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
1553*dc5640d1SHerbert Xue    </doc>
1554*dc5640d1SHerbert Xue  </interface>
1555*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Injector -->
1556*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Key -->
1557*dc5640d1SHerbert Xue  <class name="Key" extends="java.lang.Object"
1558*dc5640d1SHerbert Xue    abstract="false"
1559*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1560*dc5640d1SHerbert Xue    deprecated="not deprecated">
1561*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1562*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1563*dc5640d1SHerbert Xue      deprecated="not deprecated">
1564*dc5640d1SHerbert Xue      <doc>
1565*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1566*dc5640d1SHerbert Xue
1567*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1568*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1569*dc5640d1SHerbert Xue at runtime despite erasure.
1570*dc5640d1SHerbert Xue
1571*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1572*dc5640d1SHerbert Xue {@code @Bar}:
1573*dc5640d1SHerbert Xue
1574*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1575*dc5640d1SHerbert Xue      </doc>
1576*dc5640d1SHerbert Xue    </constructor>
1577*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.annotation.Annotation"
1578*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1579*dc5640d1SHerbert Xue      deprecated="not deprecated">
1580*dc5640d1SHerbert Xue      <doc>
1581*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1582*dc5640d1SHerbert Xue
1583*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1584*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1585*dc5640d1SHerbert Xue at runtime despite erasure.
1586*dc5640d1SHerbert Xue
1587*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1588*dc5640d1SHerbert Xue {@code @Bar}:
1589*dc5640d1SHerbert Xue
1590*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1591*dc5640d1SHerbert Xue      </doc>
1592*dc5640d1SHerbert Xue    </constructor>
1593*dc5640d1SHerbert Xue    <constructor name="Key"
1594*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1595*dc5640d1SHerbert Xue      deprecated="not deprecated">
1596*dc5640d1SHerbert Xue      <doc>
1597*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1598*dc5640d1SHerbert Xue
1599*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1600*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1601*dc5640d1SHerbert Xue at runtime despite erasure.
1602*dc5640d1SHerbert Xue
1603*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo}:
1604*dc5640d1SHerbert Xue
1605*dc5640d1SHerbert Xue <p>{@code new Key<Foo>() {}}.]]>
1606*dc5640d1SHerbert Xue      </doc>
1607*dc5640d1SHerbert Xue    </constructor>
1608*dc5640d1SHerbert Xue    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1609*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1610*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1611*dc5640d1SHerbert Xue      deprecated="not deprecated">
1612*dc5640d1SHerbert Xue      <doc>
1613*dc5640d1SHerbert Xue      <![CDATA[Gets the key type.]]>
1614*dc5640d1SHerbert Xue      </doc>
1615*dc5640d1SHerbert Xue    </method>
1616*dc5640d1SHerbert Xue    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1617*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1618*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1619*dc5640d1SHerbert Xue      deprecated="not deprecated">
1620*dc5640d1SHerbert Xue      <doc>
1621*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation type.]]>
1622*dc5640d1SHerbert Xue      </doc>
1623*dc5640d1SHerbert Xue    </method>
1624*dc5640d1SHerbert Xue    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1625*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1626*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1627*dc5640d1SHerbert Xue      deprecated="not deprecated">
1628*dc5640d1SHerbert Xue      <doc>
1629*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation.]]>
1630*dc5640d1SHerbert Xue      </doc>
1631*dc5640d1SHerbert Xue    </method>
1632*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
1633*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1634*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1635*dc5640d1SHerbert Xue      deprecated="not deprecated">
1636*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
1637*dc5640d1SHerbert Xue    </method>
1638*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
1639*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1640*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1641*dc5640d1SHerbert Xue      deprecated="not deprecated">
1642*dc5640d1SHerbert Xue    </method>
1643*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
1644*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1645*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1646*dc5640d1SHerbert Xue      deprecated="not deprecated">
1647*dc5640d1SHerbert Xue    </method>
1648*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1649*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1650*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1651*dc5640d1SHerbert Xue      deprecated="not deprecated">
1652*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1653*dc5640d1SHerbert Xue      <doc>
1654*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1655*dc5640d1SHerbert Xue      </doc>
1656*dc5640d1SHerbert Xue    </method>
1657*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1658*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1659*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1660*dc5640d1SHerbert Xue      deprecated="not deprecated">
1661*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1662*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1663*dc5640d1SHerbert Xue      <doc>
1664*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1665*dc5640d1SHerbert Xue      </doc>
1666*dc5640d1SHerbert Xue    </method>
1667*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1668*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1669*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1670*dc5640d1SHerbert Xue      deprecated="not deprecated">
1671*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1672*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1673*dc5640d1SHerbert Xue      <doc>
1674*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1675*dc5640d1SHerbert Xue      </doc>
1676*dc5640d1SHerbert Xue    </method>
1677*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1678*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1679*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1680*dc5640d1SHerbert Xue      deprecated="not deprecated">
1681*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1682*dc5640d1SHerbert Xue      <doc>
1683*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1684*dc5640d1SHerbert Xue      </doc>
1685*dc5640d1SHerbert Xue    </method>
1686*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1687*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1688*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1689*dc5640d1SHerbert Xue      deprecated="not deprecated">
1690*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1691*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1692*dc5640d1SHerbert Xue      <doc>
1693*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1694*dc5640d1SHerbert Xue      </doc>
1695*dc5640d1SHerbert Xue    </method>
1696*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1697*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1698*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1699*dc5640d1SHerbert Xue      deprecated="not deprecated">
1700*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1701*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1702*dc5640d1SHerbert Xue      <doc>
1703*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1704*dc5640d1SHerbert Xue      </doc>
1705*dc5640d1SHerbert Xue    </method>
1706*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1707*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1708*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1709*dc5640d1SHerbert Xue      deprecated="not deprecated">
1710*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1711*dc5640d1SHerbert Xue      <doc>
1712*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1713*dc5640d1SHerbert Xue      </doc>
1714*dc5640d1SHerbert Xue    </method>
1715*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1716*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1717*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1718*dc5640d1SHerbert Xue      deprecated="not deprecated">
1719*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1720*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1721*dc5640d1SHerbert Xue      <doc>
1722*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1723*dc5640d1SHerbert Xue      </doc>
1724*dc5640d1SHerbert Xue    </method>
1725*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1726*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1727*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1728*dc5640d1SHerbert Xue      deprecated="not deprecated">
1729*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1730*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1731*dc5640d1SHerbert Xue      <doc>
1732*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1733*dc5640d1SHerbert Xue      </doc>
1734*dc5640d1SHerbert Xue    </method>
1735*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1736*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1737*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1738*dc5640d1SHerbert Xue      deprecated="not deprecated">
1739*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1740*dc5640d1SHerbert Xue      <doc>
1741*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1742*dc5640d1SHerbert Xue key.
1743*dc5640d1SHerbert Xue
1744*dc5640d1SHerbert Xue @since 3.0]]>
1745*dc5640d1SHerbert Xue      </doc>
1746*dc5640d1SHerbert Xue    </method>
1747*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1748*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1749*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1750*dc5640d1SHerbert Xue      deprecated="not deprecated">
1751*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1752*dc5640d1SHerbert Xue      <doc>
1753*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1754*dc5640d1SHerbert Xue key.
1755*dc5640d1SHerbert Xue
1756*dc5640d1SHerbert Xue @since 3.0]]>
1757*dc5640d1SHerbert Xue      </doc>
1758*dc5640d1SHerbert Xue    </method>
1759*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1760*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1761*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1762*dc5640d1SHerbert Xue      deprecated="not deprecated">
1763*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1764*dc5640d1SHerbert Xue      <doc>
1765*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1766*dc5640d1SHerbert Xue key.
1767*dc5640d1SHerbert Xue
1768*dc5640d1SHerbert Xue @since 3.0]]>
1769*dc5640d1SHerbert Xue      </doc>
1770*dc5640d1SHerbert Xue    </method>
1771*dc5640d1SHerbert Xue    <method name="hasAttributes" return="boolean"
1772*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1773*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1774*dc5640d1SHerbert Xue      deprecated="not deprecated">
1775*dc5640d1SHerbert Xue      <doc>
1776*dc5640d1SHerbert Xue      <![CDATA[Returns true if this key has annotation attributes.
1777*dc5640d1SHerbert Xue
1778*dc5640d1SHerbert Xue @since 3.0]]>
1779*dc5640d1SHerbert Xue      </doc>
1780*dc5640d1SHerbert Xue    </method>
1781*dc5640d1SHerbert Xue    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1782*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1783*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1784*dc5640d1SHerbert Xue      deprecated="not deprecated">
1785*dc5640d1SHerbert Xue      <doc>
1786*dc5640d1SHerbert Xue      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1787*dc5640d1SHerbert Xue annotation type.
1788*dc5640d1SHerbert Xue
1789*dc5640d1SHerbert Xue @since 3.0]]>
1790*dc5640d1SHerbert Xue      </doc>
1791*dc5640d1SHerbert Xue    </method>
1792*dc5640d1SHerbert Xue    <doc>
1793*dc5640d1SHerbert Xue    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1794*dc5640d1SHerbert Xue Matches the type and annotation at a point of injection.
1795*dc5640d1SHerbert Xue
1796*dc5640d1SHerbert Xue <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1797*dc5640d1SHerbert Xue match:
1798*dc5640d1SHerbert Xue
1799*dc5640d1SHerbert Xue <pre>
1800*dc5640d1SHerbert Xue   {@literal @}Inject
1801*dc5640d1SHerbert Xue   public void setService({@literal @}Transactional Service service) {
1802*dc5640d1SHerbert Xue     ...
1803*dc5640d1SHerbert Xue   }
1804*dc5640d1SHerbert Xue </pre>
1805*dc5640d1SHerbert Xue
1806*dc5640d1SHerbert Xue <p>{@code Key} supports generic types via subclassing just like {@link
1807*dc5640d1SHerbert Xue TypeLiteral}.
1808*dc5640d1SHerbert Xue
1809*dc5640d1SHerbert Xue <p>Keys do not differentiate between primitive types (int, char, etc.) and
1810*dc5640d1SHerbert Xue their corresponding wrapper types (Integer, Character, etc.). Primitive
1811*dc5640d1SHerbert Xue types will be replaced with their wrapper types when keys are created.
1812*dc5640d1SHerbert Xue
1813*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1814*dc5640d1SHerbert Xue    </doc>
1815*dc5640d1SHerbert Xue  </class>
1816*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Key -->
1817*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.MembersInjector -->
1818*dc5640d1SHerbert Xue  <interface name="MembersInjector"    abstract="true"
1819*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1820*dc5640d1SHerbert Xue    deprecated="not deprecated">
1821*dc5640d1SHerbert Xue    <method name="injectMembers"
1822*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1823*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1824*dc5640d1SHerbert Xue      deprecated="not deprecated">
1825*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
1826*dc5640d1SHerbert Xue      <doc>
1827*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1828*dc5640d1SHerbert Xue absence of an injectable constructor.
1829*dc5640d1SHerbert Xue
1830*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1831*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1832*dc5640d1SHerbert Xue you, you'll never need to use this method.
1833*dc5640d1SHerbert Xue
1834*dc5640d1SHerbert Xue @param instance to inject members on. May be {@code null}.]]>
1835*dc5640d1SHerbert Xue      </doc>
1836*dc5640d1SHerbert Xue    </method>
1837*dc5640d1SHerbert Xue    <doc>
1838*dc5640d1SHerbert Xue    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1839*dc5640d1SHerbert Xue presence or absence of an injectable constructor.
1840*dc5640d1SHerbert Xue
1841*dc5640d1SHerbert Xue @param <T> type to inject members of
1842*dc5640d1SHerbert Xue
1843*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1844*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1845*dc5640d1SHerbert Xue @since 2.0]]>
1846*dc5640d1SHerbert Xue    </doc>
1847*dc5640d1SHerbert Xue  </interface>
1848*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.MembersInjector -->
1849*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Module -->
1850*dc5640d1SHerbert Xue  <interface name="Module"    abstract="true"
1851*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1852*dc5640d1SHerbert Xue    deprecated="not deprecated">
1853*dc5640d1SHerbert Xue    <method name="configure"
1854*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1855*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1856*dc5640d1SHerbert Xue      deprecated="not deprecated">
1857*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1858*dc5640d1SHerbert Xue      <doc>
1859*dc5640d1SHerbert Xue      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1860*dc5640d1SHerbert Xue
1861*dc5640d1SHerbert Xue <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1862*dc5640d1SHerbert Xue {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1863*dc5640d1SHerbert Xue discovered.]]>
1864*dc5640d1SHerbert Xue      </doc>
1865*dc5640d1SHerbert Xue    </method>
1866*dc5640d1SHerbert Xue    <doc>
1867*dc5640d1SHerbert Xue    <![CDATA[A module contributes configuration information, typically interface
1868*dc5640d1SHerbert Xue bindings, which will be used to create an {@link Injector}. A Guice-based
1869*dc5640d1SHerbert Xue application is ultimately composed of little more than a set of
1870*dc5640d1SHerbert Xue {@code Module}s and some bootstrapping code.
1871*dc5640d1SHerbert Xue
1872*dc5640d1SHerbert Xue <p>Your Module classes can use a more streamlined syntax by extending
1873*dc5640d1SHerbert Xue {@link AbstractModule} rather than implementing this interface directly.
1874*dc5640d1SHerbert Xue
1875*dc5640d1SHerbert Xue <p>In addition to the bindings configured via {@link #configure}, bindings
1876*dc5640d1SHerbert Xue will be created for all methods annotated with {@literal @}{@link Provides}.
1877*dc5640d1SHerbert Xue Use scope and binding annotations on these methods to configure the
1878*dc5640d1SHerbert Xue bindings.]]>
1879*dc5640d1SHerbert Xue    </doc>
1880*dc5640d1SHerbert Xue  </interface>
1881*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Module -->
1882*dc5640d1SHerbert Xue  <!-- start class com.google.inject.OutOfScopeException -->
1883*dc5640d1SHerbert Xue  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1884*dc5640d1SHerbert Xue    abstract="false"
1885*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1886*dc5640d1SHerbert Xue    deprecated="not deprecated">
1887*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String"
1888*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1889*dc5640d1SHerbert Xue      deprecated="not deprecated">
1890*dc5640d1SHerbert Xue    </constructor>
1891*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1892*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1893*dc5640d1SHerbert Xue      deprecated="not deprecated">
1894*dc5640d1SHerbert Xue    </constructor>
1895*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1896*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1897*dc5640d1SHerbert Xue      deprecated="not deprecated">
1898*dc5640d1SHerbert Xue    </constructor>
1899*dc5640d1SHerbert Xue    <doc>
1900*dc5640d1SHerbert Xue    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1901*dc5640d1SHerbert Xue object while the scope in question is not currently active.
1902*dc5640d1SHerbert Xue
1903*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
1904*dc5640d1SHerbert Xue @since 2.0]]>
1905*dc5640d1SHerbert Xue    </doc>
1906*dc5640d1SHerbert Xue  </class>
1907*dc5640d1SHerbert Xue  <!-- end class com.google.inject.OutOfScopeException -->
1908*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.PrivateBinder -->
1909*dc5640d1SHerbert Xue  <interface name="PrivateBinder"    abstract="true"
1910*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1911*dc5640d1SHerbert Xue    deprecated="not deprecated">
1912*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binder"/>
1913*dc5640d1SHerbert Xue    <method name="expose"
1914*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1915*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1916*dc5640d1SHerbert Xue      deprecated="not deprecated">
1917*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1918*dc5640d1SHerbert Xue      <doc>
1919*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1920*dc5640d1SHerbert Xue      </doc>
1921*dc5640d1SHerbert Xue    </method>
1922*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1923*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1924*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1925*dc5640d1SHerbert Xue      deprecated="not deprecated">
1926*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1927*dc5640d1SHerbert Xue      <doc>
1928*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1929*dc5640d1SHerbert Xue com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1930*dc5640d1SHerbert Xue binding annotation.]]>
1931*dc5640d1SHerbert Xue      </doc>
1932*dc5640d1SHerbert Xue    </method>
1933*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1934*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1935*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1936*dc5640d1SHerbert Xue      deprecated="not deprecated">
1937*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1938*dc5640d1SHerbert Xue      <doc>
1939*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1940*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1941*dc5640d1SHerbert Xue binding annotation.]]>
1942*dc5640d1SHerbert Xue      </doc>
1943*dc5640d1SHerbert Xue    </method>
1944*dc5640d1SHerbert Xue    <method name="withSource" return="com.google.inject.PrivateBinder"
1945*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1946*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1947*dc5640d1SHerbert Xue      deprecated="not deprecated">
1948*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
1949*dc5640d1SHerbert Xue    </method>
1950*dc5640d1SHerbert Xue    <method name="skipSources" return="com.google.inject.PrivateBinder"
1951*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1952*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1953*dc5640d1SHerbert Xue      deprecated="not deprecated">
1954*dc5640d1SHerbert Xue      <param name="classesToSkip" type="java.lang.Class[]"/>
1955*dc5640d1SHerbert Xue    </method>
1956*dc5640d1SHerbert Xue    <doc>
1957*dc5640d1SHerbert Xue    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1958*dc5640d1SHerbert Xue {@link com.google.inject.PrivateModule PrivateModule} for details.
1959*dc5640d1SHerbert Xue
1960*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1961*dc5640d1SHerbert Xue @since 2.0]]>
1962*dc5640d1SHerbert Xue    </doc>
1963*dc5640d1SHerbert Xue  </interface>
1964*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.PrivateBinder -->
1965*dc5640d1SHerbert Xue  <!-- start class com.google.inject.PrivateModule -->
1966*dc5640d1SHerbert Xue  <class name="PrivateModule" extends="java.lang.Object"
1967*dc5640d1SHerbert Xue    abstract="true"
1968*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1969*dc5640d1SHerbert Xue    deprecated="not deprecated">
1970*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
1971*dc5640d1SHerbert Xue    <constructor name="PrivateModule"
1972*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1973*dc5640d1SHerbert Xue      deprecated="not deprecated">
1974*dc5640d1SHerbert Xue    </constructor>
1975*dc5640d1SHerbert Xue    <method name="configure"
1976*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="true"
1977*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1978*dc5640d1SHerbert Xue      deprecated="not deprecated">
1979*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1980*dc5640d1SHerbert Xue    </method>
1981*dc5640d1SHerbert Xue    <method name="configure"
1982*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1983*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1984*dc5640d1SHerbert Xue      deprecated="not deprecated">
1985*dc5640d1SHerbert Xue      <doc>
1986*dc5640d1SHerbert Xue      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1987*dc5640d1SHerbert Xue expose()} to make the bindings in this module available externally.]]>
1988*dc5640d1SHerbert Xue      </doc>
1989*dc5640d1SHerbert Xue    </method>
1990*dc5640d1SHerbert Xue    <method name="expose"
1991*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1992*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1993*dc5640d1SHerbert Xue      deprecated="not deprecated">
1994*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1995*dc5640d1SHerbert Xue      <doc>
1996*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1997*dc5640d1SHerbert Xue      </doc>
1998*dc5640d1SHerbert Xue    </method>
1999*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2000*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2001*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2002*dc5640d1SHerbert Xue      deprecated="not deprecated">
2003*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2004*dc5640d1SHerbert Xue      <doc>
2005*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2006*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2007*dc5640d1SHerbert Xue binding annotation.]]>
2008*dc5640d1SHerbert Xue      </doc>
2009*dc5640d1SHerbert Xue    </method>
2010*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2011*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2012*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2013*dc5640d1SHerbert Xue      deprecated="not deprecated">
2014*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
2015*dc5640d1SHerbert Xue      <doc>
2016*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2017*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2018*dc5640d1SHerbert Xue binding annotation.]]>
2019*dc5640d1SHerbert Xue      </doc>
2020*dc5640d1SHerbert Xue    </method>
2021*dc5640d1SHerbert Xue    <method name="binder" return="com.google.inject.PrivateBinder"
2022*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2023*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2024*dc5640d1SHerbert Xue      deprecated="not deprecated">
2025*dc5640d1SHerbert Xue      <doc>
2026*dc5640d1SHerbert Xue      <![CDATA[Returns the current binder.]]>
2027*dc5640d1SHerbert Xue      </doc>
2028*dc5640d1SHerbert Xue    </method>
2029*dc5640d1SHerbert Xue    <method name="bindScope"
2030*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2031*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2032*dc5640d1SHerbert Xue      deprecated="not deprecated">
2033*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2034*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
2035*dc5640d1SHerbert Xue      <doc>
2036*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
2037*dc5640d1SHerbert Xue      </doc>
2038*dc5640d1SHerbert Xue    </method>
2039*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
2040*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2041*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2042*dc5640d1SHerbert Xue      deprecated="not deprecated">
2043*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2044*dc5640d1SHerbert Xue      <doc>
2045*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Key)]]>
2046*dc5640d1SHerbert Xue      </doc>
2047*dc5640d1SHerbert Xue    </method>
2048*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2049*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2050*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2051*dc5640d1SHerbert Xue      deprecated="not deprecated">
2052*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2053*dc5640d1SHerbert Xue      <doc>
2054*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(TypeLiteral)]]>
2055*dc5640d1SHerbert Xue      </doc>
2056*dc5640d1SHerbert Xue    </method>
2057*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2058*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2059*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2060*dc5640d1SHerbert Xue      deprecated="not deprecated">
2061*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
2062*dc5640d1SHerbert Xue      <doc>
2063*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Class)]]>
2064*dc5640d1SHerbert Xue      </doc>
2065*dc5640d1SHerbert Xue    </method>
2066*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
2067*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2068*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2069*dc5640d1SHerbert Xue      deprecated="not deprecated">
2070*dc5640d1SHerbert Xue      <doc>
2071*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindConstant()]]>
2072*dc5640d1SHerbert Xue      </doc>
2073*dc5640d1SHerbert Xue    </method>
2074*dc5640d1SHerbert Xue    <method name="install"
2075*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2076*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2077*dc5640d1SHerbert Xue      deprecated="not deprecated">
2078*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
2079*dc5640d1SHerbert Xue      <doc>
2080*dc5640d1SHerbert Xue      <![CDATA[@see Binder#install(Module)]]>
2081*dc5640d1SHerbert Xue      </doc>
2082*dc5640d1SHerbert Xue    </method>
2083*dc5640d1SHerbert Xue    <method name="addError"
2084*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2085*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2086*dc5640d1SHerbert Xue      deprecated="not deprecated">
2087*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
2088*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
2089*dc5640d1SHerbert Xue      <doc>
2090*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(String, Object[])]]>
2091*dc5640d1SHerbert Xue      </doc>
2092*dc5640d1SHerbert Xue    </method>
2093*dc5640d1SHerbert Xue    <method name="addError"
2094*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2095*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2096*dc5640d1SHerbert Xue      deprecated="not deprecated">
2097*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
2098*dc5640d1SHerbert Xue      <doc>
2099*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Throwable)]]>
2100*dc5640d1SHerbert Xue      </doc>
2101*dc5640d1SHerbert Xue    </method>
2102*dc5640d1SHerbert Xue    <method name="addError"
2103*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2104*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2105*dc5640d1SHerbert Xue      deprecated="not deprecated">
2106*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
2107*dc5640d1SHerbert Xue      <doc>
2108*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Message)]]>
2109*dc5640d1SHerbert Xue      </doc>
2110*dc5640d1SHerbert Xue    </method>
2111*dc5640d1SHerbert Xue    <method name="requestInjection"
2112*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2113*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2114*dc5640d1SHerbert Xue      deprecated="not deprecated">
2115*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
2116*dc5640d1SHerbert Xue      <doc>
2117*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestInjection(Object)]]>
2118*dc5640d1SHerbert Xue      </doc>
2119*dc5640d1SHerbert Xue    </method>
2120*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
2121*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2122*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2123*dc5640d1SHerbert Xue      deprecated="not deprecated">
2124*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
2125*dc5640d1SHerbert Xue      <doc>
2126*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2127*dc5640d1SHerbert Xue      </doc>
2128*dc5640d1SHerbert Xue    </method>
2129*dc5640d1SHerbert Xue    <method name="bindInterceptor"
2130*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2131*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2132*dc5640d1SHerbert Xue      deprecated="not deprecated">
2133*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2134*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2135*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2136*dc5640d1SHerbert Xue      <doc>
2137*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2138*dc5640d1SHerbert Xue      </doc>
2139*dc5640d1SHerbert Xue    </method>
2140*dc5640d1SHerbert Xue    <method name="requireBinding"
2141*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2142*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2143*dc5640d1SHerbert Xue      deprecated="not deprecated">
2144*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2145*dc5640d1SHerbert Xue      <doc>
2146*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2147*dc5640d1SHerbert Xue      </doc>
2148*dc5640d1SHerbert Xue    </method>
2149*dc5640d1SHerbert Xue    <method name="requireBinding"
2150*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2151*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2152*dc5640d1SHerbert Xue      deprecated="not deprecated">
2153*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2154*dc5640d1SHerbert Xue      <doc>
2155*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2156*dc5640d1SHerbert Xue      </doc>
2157*dc5640d1SHerbert Xue    </method>
2158*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2159*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2160*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2161*dc5640d1SHerbert Xue      deprecated="not deprecated">
2162*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2163*dc5640d1SHerbert Xue      <doc>
2164*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Key)]]>
2165*dc5640d1SHerbert Xue      </doc>
2166*dc5640d1SHerbert Xue    </method>
2167*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2168*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2169*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2170*dc5640d1SHerbert Xue      deprecated="not deprecated">
2171*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2172*dc5640d1SHerbert Xue      <doc>
2173*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Class)]]>
2174*dc5640d1SHerbert Xue      </doc>
2175*dc5640d1SHerbert Xue    </method>
2176*dc5640d1SHerbert Xue    <method name="convertToTypes"
2177*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2178*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2179*dc5640d1SHerbert Xue      deprecated="not deprecated">
2180*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2181*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2182*dc5640d1SHerbert Xue      <doc>
2183*dc5640d1SHerbert Xue      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2184*dc5640d1SHerbert Xue      </doc>
2185*dc5640d1SHerbert Xue    </method>
2186*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
2187*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2188*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2189*dc5640d1SHerbert Xue      deprecated="not deprecated">
2190*dc5640d1SHerbert Xue      <doc>
2191*dc5640d1SHerbert Xue      <![CDATA[@see Binder#currentStage()]]>
2192*dc5640d1SHerbert Xue      </doc>
2193*dc5640d1SHerbert Xue    </method>
2194*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2195*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2196*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2197*dc5640d1SHerbert Xue      deprecated="not deprecated">
2198*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2199*dc5640d1SHerbert Xue      <doc>
2200*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2201*dc5640d1SHerbert Xue      </doc>
2202*dc5640d1SHerbert Xue    </method>
2203*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2204*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2205*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2206*dc5640d1SHerbert Xue      deprecated="not deprecated">
2207*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2208*dc5640d1SHerbert Xue      <doc>
2209*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2210*dc5640d1SHerbert Xue      </doc>
2211*dc5640d1SHerbert Xue    </method>
2212*dc5640d1SHerbert Xue    <method name="bindListener"
2213*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2214*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2215*dc5640d1SHerbert Xue      deprecated="not deprecated">
2216*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2217*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2218*dc5640d1SHerbert Xue      <doc>
2219*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2220*dc5640d1SHerbert Xue      </doc>
2221*dc5640d1SHerbert Xue    </method>
2222*dc5640d1SHerbert Xue    <method name="bindListener"
2223*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2224*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2225*dc5640d1SHerbert Xue      deprecated="not deprecated">
2226*dc5640d1SHerbert Xue      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
2227*dc5640d1SHerbert Xue      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
2228*dc5640d1SHerbert Xue      <doc>
2229*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
2230*dc5640d1SHerbert Xue @since 4.0]]>
2231*dc5640d1SHerbert Xue      </doc>
2232*dc5640d1SHerbert Xue    </method>
2233*dc5640d1SHerbert Xue    <doc>
2234*dc5640d1SHerbert Xue    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2235*dc5640d1SHerbert Xue that are explicitly exposed will be available to other modules and to the users of the injector.
2236*dc5640d1SHerbert Xue This module may expose the bindings it creates and the bindings of the modules it installs.
2237*dc5640d1SHerbert Xue
2238*dc5640d1SHerbert Xue <p>A private module can be nested within a regular module or within another private module using
2239*dc5640d1SHerbert Xue {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2240*dc5640d1SHerbert Xue type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2241*dc5640d1SHerbert Xue nest multiple private modules, the result is a tree of environments where the injector's
2242*dc5640d1SHerbert Xue environment is the root.
2243*dc5640d1SHerbert Xue
2244*dc5640d1SHerbert Xue <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2245*dc5640d1SHerbert Xue com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2246*dc5640d1SHerbert Xue Exposed} annotation:
2247*dc5640d1SHerbert Xue
2248*dc5640d1SHerbert Xue <pre>
2249*dc5640d1SHerbert Xue public class FooBarBazModule extends PrivateModule {
2250*dc5640d1SHerbert Xue   protected void configure() {
2251*dc5640d1SHerbert Xue     bind(Foo.class).to(RealFoo.class);
2252*dc5640d1SHerbert Xue     expose(Foo.class);
2253*dc5640d1SHerbert Xue
2254*dc5640d1SHerbert Xue     install(new TransactionalBarModule());
2255*dc5640d1SHerbert Xue     expose(Bar.class).annotatedWith(Transactional.class);
2256*dc5640d1SHerbert Xue
2257*dc5640d1SHerbert Xue     bind(SomeImplementationDetail.class);
2258*dc5640d1SHerbert Xue     install(new MoreImplementationDetailsModule());
2259*dc5640d1SHerbert Xue   }
2260*dc5640d1SHerbert Xue
2261*dc5640d1SHerbert Xue   {@literal @}Provides {@literal @}Exposed
2262*dc5640d1SHerbert Xue   public Baz provideBaz() {
2263*dc5640d1SHerbert Xue     return new SuperBaz();
2264*dc5640d1SHerbert Xue   }
2265*dc5640d1SHerbert Xue }
2266*dc5640d1SHerbert Xue </pre>
2267*dc5640d1SHerbert Xue
2268*dc5640d1SHerbert Xue <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2269*dc5640d1SHerbert Xue injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2270*dc5640d1SHerbert Xue root environment. Such bindings are shared among all environments in the tree.
2271*dc5640d1SHerbert Xue
2272*dc5640d1SHerbert Xue <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2273*dc5640d1SHerbert Xue module will be unique to its environment. But a binding for the same type in a different private
2274*dc5640d1SHerbert Xue module will yield a different instance.
2275*dc5640d1SHerbert Xue
2276*dc5640d1SHerbert Xue <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2277*dc5640d1SHerbert Xue access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2278*dc5640d1SHerbert Xue gets access to all bindings in the child environment.
2279*dc5640d1SHerbert Xue
2280*dc5640d1SHerbert Xue <p>To promote a just-in-time binding to an explicit binding, bind it:
2281*dc5640d1SHerbert Xue <pre>
2282*dc5640d1SHerbert Xue   bind(FooImpl.class);
2283*dc5640d1SHerbert Xue </pre>
2284*dc5640d1SHerbert Xue
2285*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2286*dc5640d1SHerbert Xue @since 2.0]]>
2287*dc5640d1SHerbert Xue    </doc>
2288*dc5640d1SHerbert Xue  </class>
2289*dc5640d1SHerbert Xue  <!-- end class com.google.inject.PrivateModule -->
2290*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvidedBy -->
2291*dc5640d1SHerbert Xue  <class name="ProvidedBy"    abstract="true"
2292*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2293*dc5640d1SHerbert Xue    deprecated="not deprecated">
2294*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2295*dc5640d1SHerbert Xue    <doc>
2296*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default provider type for a type.
2297*dc5640d1SHerbert Xue
2298*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2299*dc5640d1SHerbert Xue    </doc>
2300*dc5640d1SHerbert Xue  </class>
2301*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvidedBy -->
2302*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Provider -->
2303*dc5640d1SHerbert Xue  <interface name="Provider"    abstract="true"
2304*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2305*dc5640d1SHerbert Xue    deprecated="not deprecated">
2306*dc5640d1SHerbert Xue    <implements name="javax.inject.Provider&lt;T&gt;"/>
2307*dc5640d1SHerbert Xue    <method name="get" return="T"
2308*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2309*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2310*dc5640d1SHerbert Xue      deprecated="not deprecated">
2311*dc5640d1SHerbert Xue      <doc>
2312*dc5640d1SHerbert Xue      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2313*dc5640d1SHerbert Xue
2314*dc5640d1SHerbert Xue @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2315*dc5640d1SHerbert Xue     in question is not currently active
2316*dc5640d1SHerbert Xue @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2317*dc5640d1SHerbert Xue     and throwables to describe why provision failed.]]>
2318*dc5640d1SHerbert Xue      </doc>
2319*dc5640d1SHerbert Xue    </method>
2320*dc5640d1SHerbert Xue    <doc>
2321*dc5640d1SHerbert Xue    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2322*dc5640d1SHerbert Xue by Guice:
2323*dc5640d1SHerbert Xue
2324*dc5640d1SHerbert Xue <ul>
2325*dc5640d1SHerbert Xue <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2326*dc5640d1SHerbert Xue is insufficient for a particular binding, the module can specify a custom {@code Provider}
2327*dc5640d1SHerbert Xue instead, to control exactly how Guice creates or obtains instances for the binding.
2328*dc5640d1SHerbert Xue
2329*dc5640d1SHerbert Xue <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2330*dc5640d1SHerbert Xue rather than having a {@code T} injected directly.  This may give you access to multiple
2331*dc5640d1SHerbert Xue instances, instances you wish to safely mutate and discard, instances which are out of scope
2332*dc5640d1SHerbert Xue (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2333*dc5640d1SHerbert Xue instances that will be initialized lazily.
2334*dc5640d1SHerbert Xue
2335*dc5640d1SHerbert Xue <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2336*dc5640d1SHerbert Xue when to delegate to the backing provider and when to provide the instance some other way.
2337*dc5640d1SHerbert Xue
2338*dc5640d1SHerbert Xue <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2339*dc5640d1SHerbert Xue for a given key, via the {@link Injector#getProvider} methods.
2340*dc5640d1SHerbert Xue </ul>
2341*dc5640d1SHerbert Xue
2342*dc5640d1SHerbert Xue @param <T> the type of object this provides
2343*dc5640d1SHerbert Xue
2344*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2345*dc5640d1SHerbert Xue    </doc>
2346*dc5640d1SHerbert Xue  </interface>
2347*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Provider -->
2348*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Provides -->
2349*dc5640d1SHerbert Xue  <class name="Provides"    abstract="true"
2350*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2351*dc5640d1SHerbert Xue    deprecated="not deprecated">
2352*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2353*dc5640d1SHerbert Xue    <doc>
2354*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2355*dc5640d1SHerbert Xue type is bound to its returned value. Guice will pass dependencies to the method as parameters.
2356*dc5640d1SHerbert Xue
2357*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2358*dc5640d1SHerbert Xue @since 2.0]]>
2359*dc5640d1SHerbert Xue    </doc>
2360*dc5640d1SHerbert Xue  </class>
2361*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Provides -->
2362*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvisionException -->
2363*dc5640d1SHerbert Xue  <class name="ProvisionException" extends="java.lang.RuntimeException"
2364*dc5640d1SHerbert Xue    abstract="false"
2365*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2366*dc5640d1SHerbert Xue    deprecated="not deprecated">
2367*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2368*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2369*dc5640d1SHerbert Xue      deprecated="not deprecated">
2370*dc5640d1SHerbert Xue      <doc>
2371*dc5640d1SHerbert Xue      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2372*dc5640d1SHerbert Xue      </doc>
2373*dc5640d1SHerbert Xue    </constructor>
2374*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2375*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2376*dc5640d1SHerbert Xue      deprecated="not deprecated">
2377*dc5640d1SHerbert Xue    </constructor>
2378*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String"
2379*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2380*dc5640d1SHerbert Xue      deprecated="not deprecated">
2381*dc5640d1SHerbert Xue    </constructor>
2382*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2383*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2384*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2385*dc5640d1SHerbert Xue      deprecated="not deprecated">
2386*dc5640d1SHerbert Xue      <doc>
2387*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
2388*dc5640d1SHerbert Xue      </doc>
2389*dc5640d1SHerbert Xue    </method>
2390*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
2391*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2392*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2393*dc5640d1SHerbert Xue      deprecated="not deprecated">
2394*dc5640d1SHerbert Xue    </method>
2395*dc5640d1SHerbert Xue    <doc>
2396*dc5640d1SHerbert Xue    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2397*dc5640d1SHerbert Xue
2398*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
2399*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2400*dc5640d1SHerbert Xue @since 2.0]]>
2401*dc5640d1SHerbert Xue    </doc>
2402*dc5640d1SHerbert Xue  </class>
2403*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvisionException -->
2404*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Scope -->
2405*dc5640d1SHerbert Xue  <interface name="Scope"    abstract="true"
2406*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2407*dc5640d1SHerbert Xue    deprecated="not deprecated">
2408*dc5640d1SHerbert Xue    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2409*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2410*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2411*dc5640d1SHerbert Xue      deprecated="not deprecated">
2412*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2413*dc5640d1SHerbert Xue      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2414*dc5640d1SHerbert Xue      <doc>
2415*dc5640d1SHerbert Xue      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2416*dc5640d1SHerbert Xue If an object does not exist in this scope, the provider can use the given
2417*dc5640d1SHerbert Xue unscoped provider to retrieve one.
2418*dc5640d1SHerbert Xue
2419*dc5640d1SHerbert Xue <p>Scope implementations are strongly encouraged to override
2420*dc5640d1SHerbert Xue {@link Object#toString} in the returned provider and include the backing
2421*dc5640d1SHerbert Xue provider's {@code toString()} output.
2422*dc5640d1SHerbert Xue
2423*dc5640d1SHerbert Xue @param key binding key
2424*dc5640d1SHerbert Xue @param unscoped locates an instance when one doesn't already exist in this
2425*dc5640d1SHerbert Xue  scope.
2426*dc5640d1SHerbert Xue @return a new provider which only delegates to the given unscoped provider
2427*dc5640d1SHerbert Xue  when an instance of the requested object doesn't already exist in this
2428*dc5640d1SHerbert Xue  scope]]>
2429*dc5640d1SHerbert Xue      </doc>
2430*dc5640d1SHerbert Xue    </method>
2431*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2432*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2433*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2434*dc5640d1SHerbert Xue      deprecated="not deprecated">
2435*dc5640d1SHerbert Xue      <doc>
2436*dc5640d1SHerbert Xue      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2437*dc5640d1SHerbert Xue scopes that ship with guice use the descriptions
2438*dc5640d1SHerbert Xue {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2439*dc5640d1SHerbert Xue {@code "ServletScopes.REQUEST"}.]]>
2440*dc5640d1SHerbert Xue      </doc>
2441*dc5640d1SHerbert Xue    </method>
2442*dc5640d1SHerbert Xue    <doc>
2443*dc5640d1SHerbert Xue    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2444*dc5640d1SHerbert Xue By default, an instance created by the {@link Injector} has <i>no scope</i>,
2445*dc5640d1SHerbert Xue meaning it has no state from the framework's perspective -- the
2446*dc5640d1SHerbert Xue {@code Injector} creates it, injects it once into the class that required it,
2447*dc5640d1SHerbert Xue and then immediately forgets it. Associating a scope with a particular
2448*dc5640d1SHerbert Xue binding allows the created instance to be "remembered" and possibly used
2449*dc5640d1SHerbert Xue again for other injections.
2450*dc5640d1SHerbert Xue
2451*dc5640d1SHerbert Xue <p>An example of a scope is {@link Scopes#SINGLETON}.
2452*dc5640d1SHerbert Xue
2453*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2454*dc5640d1SHerbert Xue    </doc>
2455*dc5640d1SHerbert Xue  </interface>
2456*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Scope -->
2457*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ScopeAnnotation -->
2458*dc5640d1SHerbert Xue  <class name="ScopeAnnotation"    abstract="true"
2459*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2460*dc5640d1SHerbert Xue    deprecated="not deprecated">
2461*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2462*dc5640d1SHerbert Xue    <doc>
2463*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2464*dc5640d1SHerbert Xue may apply to a single implementation class. You must also annotate scope
2465*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
2466*dc5640d1SHerbert Xue
2467*dc5640d1SHerbert Xue <pre>
2468*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
2469*dc5640d1SHerbert Xue   {@code @}Target(TYPE, METHOD)
2470*dc5640d1SHerbert Xue   {@code @}ScopeAnnotation
2471*dc5640d1SHerbert Xue   public {@code @}interface SessionScoped {}
2472*dc5640d1SHerbert Xue </pre>
2473*dc5640d1SHerbert Xue
2474*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2475*dc5640d1SHerbert Xue    </doc>
2476*dc5640d1SHerbert Xue  </class>
2477*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ScopeAnnotation -->
2478*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Scopes -->
2479*dc5640d1SHerbert Xue  <class name="Scopes" extends="java.lang.Object"
2480*dc5640d1SHerbert Xue    abstract="false"
2481*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2482*dc5640d1SHerbert Xue    deprecated="not deprecated">
2483*dc5640d1SHerbert Xue    <method name="isSingleton" return="boolean"
2484*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2485*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2486*dc5640d1SHerbert Xue      deprecated="not deprecated">
2487*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2488*dc5640d1SHerbert Xue      <doc>
2489*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2490*dc5640d1SHerbert Xue com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2491*dc5640d1SHerbert Xue was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2492*dc5640d1SHerbert Xue also true if the target binding is singleton-scoped.
2493*dc5640d1SHerbert Xue
2494*dc5640d1SHerbert Xue @since 3.0]]>
2495*dc5640d1SHerbert Xue      </doc>
2496*dc5640d1SHerbert Xue    </method>
2497*dc5640d1SHerbert Xue    <method name="isScoped" return="boolean"
2498*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2499*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2500*dc5640d1SHerbert Xue      deprecated="not deprecated">
2501*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2502*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
2503*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2504*dc5640d1SHerbert Xue      <doc>
2505*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} has the given scope. If the binding is a {@link
2506*dc5640d1SHerbert Xue com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2507*dc5640d1SHerbert Xue was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2508*dc5640d1SHerbert Xue also true if the target binding has the given scope.
2509*dc5640d1SHerbert Xue
2510*dc5640d1SHerbert Xue @param binding binding to check
2511*dc5640d1SHerbert Xue @param scope scope implementation instance
2512*dc5640d1SHerbert Xue @param scopeAnnotation scope annotation class
2513*dc5640d1SHerbert Xue @since 4.0]]>
2514*dc5640d1SHerbert Xue      </doc>
2515*dc5640d1SHerbert Xue    </method>
2516*dc5640d1SHerbert Xue    <method name="isCircularProxy" return="boolean"
2517*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2518*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2519*dc5640d1SHerbert Xue      deprecated="not deprecated">
2520*dc5640d1SHerbert Xue      <param name="object" type="java.lang.Object"/>
2521*dc5640d1SHerbert Xue      <doc>
2522*dc5640d1SHerbert Xue      <![CDATA[Returns true if the object is a proxy for a circular dependency,
2523*dc5640d1SHerbert Xue constructed by Guice because it encountered a circular dependency. Scope
2524*dc5640d1SHerbert Xue implementations should be careful to <b>not cache circular proxies</b>,
2525*dc5640d1SHerbert Xue because the proxies are not intended for general purpose use. (They are
2526*dc5640d1SHerbert Xue designed just to fulfill the immediate injection, not all injections.
2527*dc5640d1SHerbert Xue Caching them can lead to IllegalArgumentExceptions or ClassCastExceptions.)
2528*dc5640d1SHerbert Xue
2529*dc5640d1SHerbert Xue @since 4.0]]>
2530*dc5640d1SHerbert Xue      </doc>
2531*dc5640d1SHerbert Xue    </method>
2532*dc5640d1SHerbert Xue    <field name="SINGLETON" type="com.google.inject.Scope"
2533*dc5640d1SHerbert Xue      transient="false" volatile="false"
2534*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2535*dc5640d1SHerbert Xue      deprecated="not deprecated">
2536*dc5640d1SHerbert Xue      <doc>
2537*dc5640d1SHerbert Xue      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2538*dc5640d1SHerbert Xue      </doc>
2539*dc5640d1SHerbert Xue    </field>
2540*dc5640d1SHerbert Xue    <field name="NO_SCOPE" type="com.google.inject.Scope"
2541*dc5640d1SHerbert Xue      transient="false" volatile="false"
2542*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2543*dc5640d1SHerbert Xue      deprecated="not deprecated">
2544*dc5640d1SHerbert Xue      <doc>
2545*dc5640d1SHerbert Xue      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2546*dc5640d1SHerbert Xue Injector obtains an instance of an object with "no scope", it injects this
2547*dc5640d1SHerbert Xue instance then immediately forgets it.  When the next request for the same
2548*dc5640d1SHerbert Xue binding arrives it will need to obtain the instance over again.
2549*dc5640d1SHerbert Xue
2550*dc5640d1SHerbert Xue <p>This exists only in case a class has been annotated with a scope
2551*dc5640d1SHerbert Xue annotation such as {@link Singleton @Singleton}, and you need to override
2552*dc5640d1SHerbert Xue this to "no scope" in your binding.
2553*dc5640d1SHerbert Xue
2554*dc5640d1SHerbert Xue @since 2.0]]>
2555*dc5640d1SHerbert Xue      </doc>
2556*dc5640d1SHerbert Xue    </field>
2557*dc5640d1SHerbert Xue    <doc>
2558*dc5640d1SHerbert Xue    <![CDATA[Built-in scope implementations.
2559*dc5640d1SHerbert Xue
2560*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2561*dc5640d1SHerbert Xue    </doc>
2562*dc5640d1SHerbert Xue  </class>
2563*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Scopes -->
2564*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Singleton -->
2565*dc5640d1SHerbert Xue  <class name="Singleton"    abstract="true"
2566*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2567*dc5640d1SHerbert Xue    deprecated="not deprecated">
2568*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2569*dc5640d1SHerbert Xue    <doc>
2570*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want only one instance
2571*dc5640d1SHerbert Xue (per {@link Injector}) to be reused for all injections for that binding.
2572*dc5640d1SHerbert Xue
2573*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2574*dc5640d1SHerbert Xue    </doc>
2575*dc5640d1SHerbert Xue  </class>
2576*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Singleton -->
2577*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Stage -->
2578*dc5640d1SHerbert Xue  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2579*dc5640d1SHerbert Xue    abstract="false"
2580*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2581*dc5640d1SHerbert Xue    deprecated="not deprecated">
2582*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.Stage[]"
2583*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2584*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2585*dc5640d1SHerbert Xue      deprecated="not deprecated">
2586*dc5640d1SHerbert Xue    </method>
2587*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.Stage"
2588*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2589*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2590*dc5640d1SHerbert Xue      deprecated="not deprecated">
2591*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
2592*dc5640d1SHerbert Xue    </method>
2593*dc5640d1SHerbert Xue    <doc>
2594*dc5640d1SHerbert Xue    <![CDATA[The stage we're running in.
2595*dc5640d1SHerbert Xue
2596*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2597*dc5640d1SHerbert Xue    </doc>
2598*dc5640d1SHerbert Xue  </class>
2599*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Stage -->
2600*dc5640d1SHerbert Xue  <!-- start class com.google.inject.TypeLiteral -->
2601*dc5640d1SHerbert Xue  <class name="TypeLiteral" extends="java.lang.Object"
2602*dc5640d1SHerbert Xue    abstract="false"
2603*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2604*dc5640d1SHerbert Xue    deprecated="not deprecated">
2605*dc5640d1SHerbert Xue    <constructor name="TypeLiteral"
2606*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2607*dc5640d1SHerbert Xue      deprecated="not deprecated">
2608*dc5640d1SHerbert Xue      <doc>
2609*dc5640d1SHerbert Xue      <![CDATA[Constructs a new type literal. Derives represented class from type
2610*dc5640d1SHerbert Xue parameter.
2611*dc5640d1SHerbert Xue
2612*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
2613*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
2614*dc5640d1SHerbert Xue at runtime despite erasure.]]>
2615*dc5640d1SHerbert Xue      </doc>
2616*dc5640d1SHerbert Xue    </constructor>
2617*dc5640d1SHerbert Xue    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2618*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2619*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2620*dc5640d1SHerbert Xue      deprecated="not deprecated">
2621*dc5640d1SHerbert Xue      <doc>
2622*dc5640d1SHerbert Xue      <![CDATA[Returns the raw (non-generic) type for this type.
2623*dc5640d1SHerbert Xue
2624*dc5640d1SHerbert Xue @since 2.0]]>
2625*dc5640d1SHerbert Xue      </doc>
2626*dc5640d1SHerbert Xue    </method>
2627*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.reflect.Type"
2628*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2629*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2630*dc5640d1SHerbert Xue      deprecated="not deprecated">
2631*dc5640d1SHerbert Xue      <doc>
2632*dc5640d1SHerbert Xue      <![CDATA[Gets underlying {@code Type} instance.]]>
2633*dc5640d1SHerbert Xue      </doc>
2634*dc5640d1SHerbert Xue    </method>
2635*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
2636*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2637*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2638*dc5640d1SHerbert Xue      deprecated="not deprecated">
2639*dc5640d1SHerbert Xue    </method>
2640*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
2641*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2642*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2643*dc5640d1SHerbert Xue      deprecated="not deprecated">
2644*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
2645*dc5640d1SHerbert Xue    </method>
2646*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2647*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2648*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2649*dc5640d1SHerbert Xue      deprecated="not deprecated">
2650*dc5640d1SHerbert Xue    </method>
2651*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2652*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2653*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2654*dc5640d1SHerbert Xue      deprecated="not deprecated">
2655*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
2656*dc5640d1SHerbert Xue      <doc>
2657*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2658*dc5640d1SHerbert Xue      </doc>
2659*dc5640d1SHerbert Xue    </method>
2660*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2661*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2662*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2663*dc5640d1SHerbert Xue      deprecated="not deprecated">
2664*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2665*dc5640d1SHerbert Xue      <doc>
2666*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2667*dc5640d1SHerbert Xue      </doc>
2668*dc5640d1SHerbert Xue    </method>
2669*dc5640d1SHerbert Xue    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2670*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2671*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2672*dc5640d1SHerbert Xue      deprecated="not deprecated">
2673*dc5640d1SHerbert Xue      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2674*dc5640d1SHerbert Xue      <doc>
2675*dc5640d1SHerbert Xue      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2676*dc5640d1SHerbert Xue ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2677*dc5640d1SHerbert Xue Iterable.class}.
2678*dc5640d1SHerbert Xue
2679*dc5640d1SHerbert Xue @param supertype a superclass of, or interface implemented by, this.
2680*dc5640d1SHerbert Xue @since 2.0]]>
2681*dc5640d1SHerbert Xue      </doc>
2682*dc5640d1SHerbert Xue    </method>
2683*dc5640d1SHerbert Xue    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2684*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2685*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2686*dc5640d1SHerbert Xue      deprecated="not deprecated">
2687*dc5640d1SHerbert Xue      <param name="field" type="java.lang.reflect.Field"/>
2688*dc5640d1SHerbert Xue      <doc>
2689*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic type of {@code field}.
2690*dc5640d1SHerbert Xue
2691*dc5640d1SHerbert Xue @param field a field defined by this or any superclass.
2692*dc5640d1SHerbert Xue @since 2.0]]>
2693*dc5640d1SHerbert Xue      </doc>
2694*dc5640d1SHerbert Xue    </method>
2695*dc5640d1SHerbert Xue    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2696*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2697*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2698*dc5640d1SHerbert Xue      deprecated="not deprecated">
2699*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2700*dc5640d1SHerbert Xue      <doc>
2701*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2702*dc5640d1SHerbert Xue
2703*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2704*dc5640d1SHerbert Xue @since 2.0]]>
2705*dc5640d1SHerbert Xue      </doc>
2706*dc5640d1SHerbert Xue    </method>
2707*dc5640d1SHerbert Xue    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2709*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2710*dc5640d1SHerbert Xue      deprecated="not deprecated">
2711*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2712*dc5640d1SHerbert Xue      <doc>
2713*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2714*dc5640d1SHerbert Xue
2715*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2716*dc5640d1SHerbert Xue @since 2.0]]>
2717*dc5640d1SHerbert Xue      </doc>
2718*dc5640d1SHerbert Xue    </method>
2719*dc5640d1SHerbert Xue    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2720*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2721*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2722*dc5640d1SHerbert Xue      deprecated="not deprecated">
2723*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
2724*dc5640d1SHerbert Xue      <doc>
2725*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic return type of {@code method}.
2726*dc5640d1SHerbert Xue
2727*dc5640d1SHerbert Xue @param method a method defined by this or any supertype.
2728*dc5640d1SHerbert Xue @since 2.0]]>
2729*dc5640d1SHerbert Xue      </doc>
2730*dc5640d1SHerbert Xue    </method>
2731*dc5640d1SHerbert Xue    <doc>
2732*dc5640d1SHerbert Xue    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2733*dc5640d1SHerbert Xue represent generic types, so this class does. Forces clients to create a
2734*dc5640d1SHerbert Xue subclass of this class which enables retrieval the type information even at
2735*dc5640d1SHerbert Xue runtime.
2736*dc5640d1SHerbert Xue
2737*dc5640d1SHerbert Xue <p>For example, to create a type literal for {@code List<String>}, you can
2738*dc5640d1SHerbert Xue create an empty anonymous inner class:
2739*dc5640d1SHerbert Xue
2740*dc5640d1SHerbert Xue <p>
2741*dc5640d1SHerbert Xue {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2742*dc5640d1SHerbert Xue
2743*dc5640d1SHerbert Xue <p>Along with modeling generic types, this class can resolve type parameters.
2744*dc5640d1SHerbert Xue For example, to figure out what type {@code keySet()} returns on a {@code
2745*dc5640d1SHerbert Xue Map<Integer, String>}, use this code:<pre>   {@code
2746*dc5640d1SHerbert Xue
2747*dc5640d1SHerbert Xue   TypeLiteral<Map<Integer, String>> mapType
2748*dc5640d1SHerbert Xue       = new TypeLiteral<Map<Integer, String>>() {};
2749*dc5640d1SHerbert Xue   TypeLiteral<?> keySetType
2750*dc5640d1SHerbert Xue       = mapType.getReturnType(Map.class.getMethod("keySet"));
2751*dc5640d1SHerbert Xue   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2752*dc5640d1SHerbert Xue
2753*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2754*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2755*dc5640d1SHerbert Xue    </doc>
2756*dc5640d1SHerbert Xue  </class>
2757*dc5640d1SHerbert Xue  <!-- end class com.google.inject.TypeLiteral -->
2758*dc5640d1SHerbert Xue</package>
2759*dc5640d1SHerbert Xue<package name="com.google.inject.assistedinject">
2760*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.Assisted -->
2761*dc5640d1SHerbert Xue  <class name="Assisted"    abstract="true"
2762*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2763*dc5640d1SHerbert Xue    deprecated="not deprecated">
2764*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2765*dc5640d1SHerbert Xue    <doc>
2766*dc5640d1SHerbert Xue    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2767*dc5640d1SHerbert Xue
2768*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2769*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2770*dc5640d1SHerbert Xue    </doc>
2771*dc5640d1SHerbert Xue  </class>
2772*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.Assisted -->
2773*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2774*dc5640d1SHerbert Xue  <class name="AssistedInject"    abstract="true"
2775*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2776*dc5640d1SHerbert Xue    deprecated="not deprecated">
2777*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2778*dc5640d1SHerbert Xue    <doc>
2779*dc5640d1SHerbert Xue    <![CDATA[<p>
2780*dc5640d1SHerbert Xue When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2781*dc5640d1SHerbert Xue {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2782*dc5640d1SHerbert Xue parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2783*dc5640d1SHerbert Xue annotations. The assisted parameters must exactly match one corresponding factory method within
2784*dc5640d1SHerbert Xue the factory interface, but the parameters do not need to be in the same order. Constructors
2785*dc5640d1SHerbert Xue annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2786*dc5640d1SHerbert Xue (such as AOP).
2787*dc5640d1SHerbert Xue
2788*dc5640d1SHerbert Xue <p>
2789*dc5640d1SHerbert Xue <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2790*dc5640d1SHerbert Xue annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2791*dc5640d1SHerbert Xue parameters must exactly match one corresponding factory method within the factory interface and
2792*dc5640d1SHerbert Xue all must be in the same order as listed in the factory. In this backwards compatable mode,
2793*dc5640d1SHerbert Xue constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2794*dc5640d1SHerbert Xue none of the benefits.
2795*dc5640d1SHerbert Xue
2796*dc5640d1SHerbert Xue <p>
2797*dc5640d1SHerbert Xue Constructor parameters must be either supplied by the factory interface and marked with
2798*dc5640d1SHerbert Xue <code>@Assisted</code>, or they must be injectable.
2799*dc5640d1SHerbert Xue
2800*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2801*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2802*dc5640d1SHerbert Xue    </doc>
2803*dc5640d1SHerbert Xue  </class>
2804*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2805*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2806*dc5640d1SHerbert Xue  <interface name="AssistedInjectBinding"    abstract="true"
2807*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2808*dc5640d1SHerbert Xue    deprecated="not deprecated">
2809*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2810*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2811*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2812*dc5640d1SHerbert Xue      deprecated="not deprecated">
2813*dc5640d1SHerbert Xue      <doc>
2814*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2815*dc5640d1SHerbert Xue      </doc>
2816*dc5640d1SHerbert Xue    </method>
2817*dc5640d1SHerbert Xue    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2818*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2819*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2820*dc5640d1SHerbert Xue      deprecated="not deprecated">
2821*dc5640d1SHerbert Xue      <doc>
2822*dc5640d1SHerbert Xue      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2823*dc5640d1SHerbert Xue      </doc>
2824*dc5640d1SHerbert Xue    </method>
2825*dc5640d1SHerbert Xue    <doc>
2826*dc5640d1SHerbert Xue    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2827*dc5640d1SHerbert Xue
2828*dc5640d1SHerbert Xue @param <T> The fully qualified type of the factory.
2829*dc5640d1SHerbert Xue
2830*dc5640d1SHerbert Xue @since 3.0
2831*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2832*dc5640d1SHerbert Xue    </doc>
2833*dc5640d1SHerbert Xue  </interface>
2834*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2835*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2836*dc5640d1SHerbert Xue  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2837*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2838*dc5640d1SHerbert Xue    deprecated="not deprecated">
2839*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2840*dc5640d1SHerbert Xue    <method name="visit" return="V"
2841*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2842*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2843*dc5640d1SHerbert Xue      deprecated="not deprecated">
2844*dc5640d1SHerbert Xue      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2845*dc5640d1SHerbert Xue      <doc>
2846*dc5640d1SHerbert Xue      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2847*dc5640d1SHerbert Xue      </doc>
2848*dc5640d1SHerbert Xue    </method>
2849*dc5640d1SHerbert Xue    <doc>
2850*dc5640d1SHerbert Xue    <![CDATA[A visitor for the AssistedInject extension.
2851*dc5640d1SHerbert Xue <p>
2852*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2853*dc5640d1SHerbert Xue {@link FactoryModuleBuilder} will be visited through this interface.
2854*dc5640d1SHerbert Xue
2855*dc5640d1SHerbert Xue @since 3.0
2856*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2857*dc5640d1SHerbert Xue    </doc>
2858*dc5640d1SHerbert Xue  </interface>
2859*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2860*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2861*dc5640d1SHerbert Xue  <interface name="AssistedMethod"    abstract="true"
2862*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2863*dc5640d1SHerbert Xue    deprecated="not deprecated">
2864*dc5640d1SHerbert Xue    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2865*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2866*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2867*dc5640d1SHerbert Xue      deprecated="not deprecated">
2868*dc5640d1SHerbert Xue      <doc>
2869*dc5640d1SHerbert Xue      <![CDATA[Returns the factory method that is being assisted.]]>
2870*dc5640d1SHerbert Xue      </doc>
2871*dc5640d1SHerbert Xue    </method>
2872*dc5640d1SHerbert Xue    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2873*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2874*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2875*dc5640d1SHerbert Xue      deprecated="not deprecated">
2876*dc5640d1SHerbert Xue      <doc>
2877*dc5640d1SHerbert Xue      <![CDATA[Returns the implementation type that will be created when the method is
2878*dc5640d1SHerbert Xue used.]]>
2879*dc5640d1SHerbert Xue      </doc>
2880*dc5640d1SHerbert Xue    </method>
2881*dc5640d1SHerbert Xue    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2882*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2883*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2884*dc5640d1SHerbert Xue      deprecated="not deprecated">
2885*dc5640d1SHerbert Xue      <doc>
2886*dc5640d1SHerbert Xue      <![CDATA[Returns the constructor that will be used to construct instances of the
2887*dc5640d1SHerbert Xue implementation.]]>
2888*dc5640d1SHerbert Xue      </doc>
2889*dc5640d1SHerbert Xue    </method>
2890*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2891*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2892*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2893*dc5640d1SHerbert Xue      deprecated="not deprecated">
2894*dc5640d1SHerbert Xue      <doc>
2895*dc5640d1SHerbert Xue      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2896*dc5640d1SHerbert Xue the implementation.]]>
2897*dc5640d1SHerbert Xue      </doc>
2898*dc5640d1SHerbert Xue    </method>
2899*dc5640d1SHerbert Xue    <doc>
2900*dc5640d1SHerbert Xue    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2901*dc5640d1SHerbert Xue
2902*dc5640d1SHerbert Xue @since 3.0
2903*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2904*dc5640d1SHerbert Xue    </doc>
2905*dc5640d1SHerbert Xue  </interface>
2906*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2907*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2908*dc5640d1SHerbert Xue  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2909*dc5640d1SHerbert Xue    abstract="false"
2910*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2911*dc5640d1SHerbert Xue    deprecated="not deprecated">
2912*dc5640d1SHerbert Xue    <constructor name="FactoryModuleBuilder"
2913*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2914*dc5640d1SHerbert Xue      deprecated="not deprecated">
2915*dc5640d1SHerbert Xue    </constructor>
2916*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2917*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2918*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2919*dc5640d1SHerbert Xue      deprecated="not deprecated">
2920*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2921*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2922*dc5640d1SHerbert Xue      <doc>
2923*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2924*dc5640d1SHerbert Xue      </doc>
2925*dc5640d1SHerbert Xue    </method>
2926*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2927*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2928*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2929*dc5640d1SHerbert Xue      deprecated="not deprecated">
2930*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2931*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2932*dc5640d1SHerbert Xue      <doc>
2933*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2934*dc5640d1SHerbert Xue      </doc>
2935*dc5640d1SHerbert Xue    </method>
2936*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2937*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2938*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2939*dc5640d1SHerbert Xue      deprecated="not deprecated">
2940*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2941*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2942*dc5640d1SHerbert Xue      <doc>
2943*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2944*dc5640d1SHerbert Xue      </doc>
2945*dc5640d1SHerbert Xue    </method>
2946*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2947*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2948*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2949*dc5640d1SHerbert Xue      deprecated="not deprecated">
2950*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2951*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2952*dc5640d1SHerbert Xue      <doc>
2953*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2954*dc5640d1SHerbert Xue      </doc>
2955*dc5640d1SHerbert Xue    </method>
2956*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2957*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2958*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2959*dc5640d1SHerbert Xue      deprecated="not deprecated">
2960*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2961*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2962*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2963*dc5640d1SHerbert Xue      <doc>
2964*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2965*dc5640d1SHerbert Xue      </doc>
2966*dc5640d1SHerbert Xue    </method>
2967*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2968*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2969*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2970*dc5640d1SHerbert Xue      deprecated="not deprecated">
2971*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2972*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2973*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2974*dc5640d1SHerbert Xue      <doc>
2975*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2976*dc5640d1SHerbert Xue      </doc>
2977*dc5640d1SHerbert Xue    </method>
2978*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2979*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2980*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2981*dc5640d1SHerbert Xue      deprecated="not deprecated">
2982*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2983*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2984*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2985*dc5640d1SHerbert Xue      <doc>
2986*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2987*dc5640d1SHerbert Xue      </doc>
2988*dc5640d1SHerbert Xue    </method>
2989*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2990*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2991*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2992*dc5640d1SHerbert Xue      deprecated="not deprecated">
2993*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2994*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2995*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2996*dc5640d1SHerbert Xue      <doc>
2997*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2998*dc5640d1SHerbert Xue      </doc>
2999*dc5640d1SHerbert Xue    </method>
3000*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3002*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3003*dc5640d1SHerbert Xue      deprecated="not deprecated">
3004*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3005*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3006*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3007*dc5640d1SHerbert Xue      <doc>
3008*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3009*dc5640d1SHerbert Xue      </doc>
3010*dc5640d1SHerbert Xue    </method>
3011*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3012*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3013*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3014*dc5640d1SHerbert Xue      deprecated="not deprecated">
3015*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3016*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3017*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3018*dc5640d1SHerbert Xue      <doc>
3019*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3020*dc5640d1SHerbert Xue      </doc>
3021*dc5640d1SHerbert Xue    </method>
3022*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3023*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3024*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3025*dc5640d1SHerbert Xue      deprecated="not deprecated">
3026*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3027*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3028*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3029*dc5640d1SHerbert Xue      <doc>
3030*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3031*dc5640d1SHerbert Xue      </doc>
3032*dc5640d1SHerbert Xue    </method>
3033*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3034*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3035*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3036*dc5640d1SHerbert Xue      deprecated="not deprecated">
3037*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3038*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3039*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3040*dc5640d1SHerbert Xue      <doc>
3041*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3042*dc5640d1SHerbert Xue      </doc>
3043*dc5640d1SHerbert Xue    </method>
3044*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3045*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3046*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3047*dc5640d1SHerbert Xue      deprecated="not deprecated">
3048*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3049*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3050*dc5640d1SHerbert Xue      <doc>
3051*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3052*dc5640d1SHerbert Xue      </doc>
3053*dc5640d1SHerbert Xue    </method>
3054*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3055*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3056*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3057*dc5640d1SHerbert Xue      deprecated="not deprecated">
3058*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3059*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3060*dc5640d1SHerbert Xue      <doc>
3061*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3062*dc5640d1SHerbert Xue      </doc>
3063*dc5640d1SHerbert Xue    </method>
3064*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3065*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3066*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3067*dc5640d1SHerbert Xue      deprecated="not deprecated">
3068*dc5640d1SHerbert Xue      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
3069*dc5640d1SHerbert Xue      <doc>
3070*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3071*dc5640d1SHerbert Xue      </doc>
3072*dc5640d1SHerbert Xue    </method>
3073*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3074*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3075*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3076*dc5640d1SHerbert Xue      deprecated="not deprecated">
3077*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3078*dc5640d1SHerbert Xue      <doc>
3079*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3080*dc5640d1SHerbert Xue      </doc>
3081*dc5640d1SHerbert Xue    </method>
3082*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3083*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3084*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3085*dc5640d1SHerbert Xue      deprecated="not deprecated">
3086*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
3087*dc5640d1SHerbert Xue    </method>
3088*dc5640d1SHerbert Xue    <doc>
3089*dc5640d1SHerbert Xue    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
3090*dc5640d1SHerbert Xue construct objects.
3091*dc5640d1SHerbert Xue
3092*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
3093*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
3094*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
3095*dc5640d1SHerbert Xue
3096*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3097*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
3098*dc5640d1SHerbert Xue }</pre>
3099*dc5640d1SHerbert Xue
3100*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3101*dc5640d1SHerbert Xue or <i>newPayment</i>.
3102*dc5640d1SHerbert Xue
3103*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
3104*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
3105*dc5640d1SHerbert Xue Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
3106*dc5640d1SHerbert Xue should have parameters that match each of the factory method's parameters. Each factory-supplied
3107*dc5640d1SHerbert Xue parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
3108*dc5640d1SHerbert Xue parameter is not bound by your application's modules.
3109*dc5640d1SHerbert Xue
3110*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3111*dc5640d1SHerbert Xue   {@literal @}Inject
3112*dc5640d1SHerbert Xue   public RealPayment(
3113*dc5640d1SHerbert Xue      CreditService creditService,
3114*dc5640d1SHerbert Xue      AuthService authService,
3115*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
3116*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
3117*dc5640d1SHerbert Xue     ...
3118*dc5640d1SHerbert Xue   }
3119*dc5640d1SHerbert Xue }</pre>
3120*dc5640d1SHerbert Xue
3121*dc5640d1SHerbert Xue <h3>Multiple factory methods for the same type</h3>
3122*dc5640d1SHerbert Xue If the factory contains many methods that return the same type, you can create multiple
3123*dc5640d1SHerbert Xue constructors in your concrete class, each constructor marked with with
3124*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
3125*dc5640d1SHerbert Xue factory methods.
3126*dc5640d1SHerbert Xue
3127*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3128*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
3129*dc5640d1SHerbert Xue    Payment createWithoutDate(Money amount);
3130*dc5640d1SHerbert Xue }
3131*dc5640d1SHerbert Xue
3132*dc5640d1SHerbert Xue public class RealPayment implements Payment {
3133*dc5640d1SHerbert Xue  {@literal @}AssistedInject
3134*dc5640d1SHerbert Xue   public RealPayment(
3135*dc5640d1SHerbert Xue      CreditService creditService,
3136*dc5640d1SHerbert Xue      AuthService authService,
3137*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Date startDate</strong>,
3138*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3139*dc5640d1SHerbert Xue     ...
3140*dc5640d1SHerbert Xue   }
3141*dc5640d1SHerbert Xue
3142*dc5640d1SHerbert Xue  {@literal @}AssistedInject
3143*dc5640d1SHerbert Xue   public RealPayment(
3144*dc5640d1SHerbert Xue      CreditService creditService,
3145*dc5640d1SHerbert Xue      AuthService authService,
3146*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3147*dc5640d1SHerbert Xue     ...
3148*dc5640d1SHerbert Xue   }
3149*dc5640d1SHerbert Xue }</pre>
3150*dc5640d1SHerbert Xue
3151*dc5640d1SHerbert Xue <h3>Configuring simple factories</h3>
3152*dc5640d1SHerbert Xue In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3153*dc5640d1SHerbert Xue factory:
3154*dc5640d1SHerbert Xue
3155*dc5640d1SHerbert Xue <pre>install(new FactoryModuleBuilder()
3156*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3157*dc5640d1SHerbert Xue     .build(PaymentFactory.class));</pre>
3158*dc5640d1SHerbert Xue
3159*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3160*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3161*dc5640d1SHerbert Xue
3162*dc5640d1SHerbert Xue <h3>Configuring complex factories</h3>
3163*dc5640d1SHerbert Xue Factories can create an arbitrary number of objects, one per each method.  Each factory
3164*dc5640d1SHerbert Xue method can be configured using <code>.implement</code>.
3165*dc5640d1SHerbert Xue
3166*dc5640d1SHerbert Xue <pre>public interface OrderFactory {
3167*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
3168*dc5640d1SHerbert Xue    Shipment create(Customer customer, Item item);
3169*dc5640d1SHerbert Xue    Receipt create(Payment payment, Shipment shipment);
3170*dc5640d1SHerbert Xue }
3171*dc5640d1SHerbert Xue
3172*dc5640d1SHerbert Xue [...]
3173*dc5640d1SHerbert Xue
3174*dc5640d1SHerbert Xue install(new FactoryModuleBuilder()
3175*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3176*dc5640d1SHerbert Xue     // excluding .implement for Shipment means the implementation class
3177*dc5640d1SHerbert Xue     // will be 'Shipment' itself, which is legal if it's not an interface.
3178*dc5640d1SHerbert Xue     .implement(Receipt.class, RealReceipt.class)
3179*dc5640d1SHerbert Xue     .build(OrderFactory.class));</pre>
3180*dc5640d1SHerbert Xue </pre>
3181*dc5640d1SHerbert Xue
3182*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3183*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3184*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3185*dc5640d1SHerbert Xue
3186*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3187*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3188*dc5640d1SHerbert Xue
3189*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3190*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3191*dc5640d1SHerbert Xue     payment.apply();
3192*dc5640d1SHerbert Xue   }
3193*dc5640d1SHerbert Xue }</pre>
3194*dc5640d1SHerbert Xue
3195*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3196*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3197*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3198*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3199*dc5640d1SHerbert Xue
3200*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3201*dc5640d1SHerbert Xue   Payment create(
3202*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3203*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3204*dc5640d1SHerbert Xue       Money amount);
3205*dc5640d1SHerbert Xue } </pre>
3206*dc5640d1SHerbert Xue
3207*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3208*dc5640d1SHerbert Xue
3209*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3210*dc5640d1SHerbert Xue   {@literal @}Inject
3211*dc5640d1SHerbert Xue   public RealPayment(
3212*dc5640d1SHerbert Xue      CreditService creditService,
3213*dc5640d1SHerbert Xue      AuthService authService,
3214*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3215*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3216*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3217*dc5640d1SHerbert Xue     ...
3218*dc5640d1SHerbert Xue   }
3219*dc5640d1SHerbert Xue }</pre>
3220*dc5640d1SHerbert Xue
3221*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3222*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3223*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3224*dc5640d1SHerbert Xue returned.
3225*dc5640d1SHerbert Xue
3226*dc5640d1SHerbert Xue <h3>More configuration options</h3>
3227*dc5640d1SHerbert Xue In addition to simply specifying an implementation class for any returned type, factories' return
3228*dc5640d1SHerbert Xue values can be automatic or can be configured to use annotations:
3229*dc5640d1SHerbert Xue <p/>
3230*dc5640d1SHerbert Xue If you just want to return the types specified in the factory, do not configure any
3231*dc5640d1SHerbert Xue implementations:
3232*dc5640d1SHerbert Xue
3233*dc5640d1SHerbert Xue <pre>public interface FruitFactory {
3234*dc5640d1SHerbert Xue   Apple getApple(Color color);
3235*dc5640d1SHerbert Xue }
3236*dc5640d1SHerbert Xue ...
3237*dc5640d1SHerbert Xue protected void configure() {
3238*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder().build(FruitFactory.class));
3239*dc5640d1SHerbert Xue }</pre>
3240*dc5640d1SHerbert Xue
3241*dc5640d1SHerbert Xue Note that any type returned by the factory in this manner needs to be an implementation class.
3242*dc5640d1SHerbert Xue <p/>
3243*dc5640d1SHerbert Xue To return two different implementations for the same interface from your factory, use binding
3244*dc5640d1SHerbert Xue annotations on your return types:
3245*dc5640d1SHerbert Xue
3246*dc5640d1SHerbert Xue <pre>interface CarFactory {
3247*dc5640d1SHerbert Xue   {@literal @}Named("fast") Car getFastCar(Color color);
3248*dc5640d1SHerbert Xue   {@literal @}Named("clean") Car getCleanCar(Color color);
3249*dc5640d1SHerbert Xue }
3250*dc5640d1SHerbert Xue ...
3251*dc5640d1SHerbert Xue protected void configure() {
3252*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder()
3253*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("fast"), Porsche.class)
3254*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("clean"), Prius.class)
3255*dc5640d1SHerbert Xue       .build(CarFactory.class));
3256*dc5640d1SHerbert Xue }</pre>
3257*dc5640d1SHerbert Xue
3258*dc5640d1SHerbert Xue <h3>Implementation limitations</h3>
3259*dc5640d1SHerbert Xue As a limitation of the implementation, it is prohibited to declare a factory method that
3260*dc5640d1SHerbert Xue accepts a {@code Provider} as one of its arguments.
3261*dc5640d1SHerbert Xue
3262*dc5640d1SHerbert Xue @since 3.0
3263*dc5640d1SHerbert Xue @author [email protected] (Peter Schmitt)]]>
3264*dc5640d1SHerbert Xue    </doc>
3265*dc5640d1SHerbert Xue  </class>
3266*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3267*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3268*dc5640d1SHerbert Xue  <class name="FactoryProvider" extends="java.lang.Object"
3269*dc5640d1SHerbert Xue    abstract="false"
3270*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3271*dc5640d1SHerbert Xue    deprecated="use {@link FactoryModuleBuilder} instead.">
3272*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3273*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
3274*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3275*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3276*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3277*dc5640d1SHerbert Xue      deprecated="not deprecated">
3278*dc5640d1SHerbert Xue      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3279*dc5640d1SHerbert Xue      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3280*dc5640d1SHerbert Xue    </method>
3281*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3282*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3283*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3284*dc5640d1SHerbert Xue      deprecated="not deprecated">
3285*dc5640d1SHerbert Xue      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3286*dc5640d1SHerbert Xue      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3287*dc5640d1SHerbert Xue    </method>
3288*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3289*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3290*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3291*dc5640d1SHerbert Xue      deprecated="not deprecated">
3292*dc5640d1SHerbert Xue    </method>
3293*dc5640d1SHerbert Xue    <method name="get" return="F"
3294*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3295*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3296*dc5640d1SHerbert Xue      deprecated="not deprecated">
3297*dc5640d1SHerbert Xue    </method>
3298*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
3299*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3300*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3301*dc5640d1SHerbert Xue      deprecated="not deprecated">
3302*dc5640d1SHerbert Xue    </method>
3303*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
3304*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3305*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3306*dc5640d1SHerbert Xue      deprecated="not deprecated">
3307*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
3308*dc5640d1SHerbert Xue    </method>
3309*dc5640d1SHerbert Xue    <doc>
3310*dc5640d1SHerbert Xue    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3311*dc5640d1SHerbert Xue additional capability.
3312*dc5640d1SHerbert Xue
3313*dc5640d1SHerbert Xue <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3314*dc5640d1SHerbert Xue construct objects.
3315*dc5640d1SHerbert Xue
3316*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
3317*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
3318*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
3319*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3320*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
3321*dc5640d1SHerbert Xue }</pre>
3322*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3323*dc5640d1SHerbert Xue or <i>newPayment</i>.
3324*dc5640d1SHerbert Xue
3325*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
3326*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3327*dc5640d1SHerbert Xue constructor. In addition to injector-supplied parameters, the constructor should have
3328*dc5640d1SHerbert Xue parameters that match each of the factory method's parameters. Each factory-supplied parameter
3329*dc5640d1SHerbert Xue requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3330*dc5640d1SHerbert Xue is not bound by your application's modules.
3331*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3332*dc5640d1SHerbert Xue   {@literal @}Inject
3333*dc5640d1SHerbert Xue   public RealPayment(
3334*dc5640d1SHerbert Xue      CreditService creditService,
3335*dc5640d1SHerbert Xue      AuthService authService,
3336*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
3337*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
3338*dc5640d1SHerbert Xue     ...
3339*dc5640d1SHerbert Xue   }
3340*dc5640d1SHerbert Xue }</pre>
3341*dc5640d1SHerbert Xue Any parameter that permits a null value should also be annotated {@code @Nullable}.
3342*dc5640d1SHerbert Xue
3343*dc5640d1SHerbert Xue <h3>Configuring factories</h3>
3344*dc5640d1SHerbert Xue In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3345*dc5640d1SHerbert Xue factory:
3346*dc5640d1SHerbert Xue <pre>bind(PaymentFactory.class).toProvider(
3347*dc5640d1SHerbert Xue     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3348*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3349*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3350*dc5640d1SHerbert Xue
3351*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3352*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3353*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3354*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3355*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3356*dc5640d1SHerbert Xue
3357*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3358*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3359*dc5640d1SHerbert Xue     payment.apply();
3360*dc5640d1SHerbert Xue   }
3361*dc5640d1SHerbert Xue }</pre>
3362*dc5640d1SHerbert Xue
3363*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3364*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3365*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3366*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3367*dc5640d1SHerbert Xue
3368*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3369*dc5640d1SHerbert Xue   Payment create(
3370*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3371*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3372*dc5640d1SHerbert Xue       Money amount);
3373*dc5640d1SHerbert Xue } </pre>
3374*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3375*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3376*dc5640d1SHerbert Xue   {@literal @}Inject
3377*dc5640d1SHerbert Xue   public RealPayment(
3378*dc5640d1SHerbert Xue      CreditService creditService,
3379*dc5640d1SHerbert Xue      AuthService authService,
3380*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3381*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3382*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3383*dc5640d1SHerbert Xue     ...
3384*dc5640d1SHerbert Xue   }
3385*dc5640d1SHerbert Xue }</pre>
3386*dc5640d1SHerbert Xue
3387*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3388*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3389*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3390*dc5640d1SHerbert Xue returned.
3391*dc5640d1SHerbert Xue
3392*dc5640d1SHerbert Xue <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3393*dc5640d1SHerbert Xue Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3394*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3395*dc5640d1SHerbert Xue
3396*dc5640d1SHerbert Xue <p>Instead of matching factory method arguments to constructor parameters using their names, the
3397*dc5640d1SHerbert Xue <strong>parameters are matched by their order</strong>. The first factory method argument is
3398*dc5640d1SHerbert Xue used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3399*dc5640d1SHerbert Xue effect.
3400*dc5640d1SHerbert Xue
3401*dc5640d1SHerbert Xue <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3402*dc5640d1SHerbert Xue method interception. They do receive post-construction member injection.
3403*dc5640d1SHerbert Xue
3404*dc5640d1SHerbert Xue @param <F> The factory interface
3405*dc5640d1SHerbert Xue
3406*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
3407*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3408*dc5640d1SHerbert Xue @author [email protected] (Daniel Martin)
3409*dc5640d1SHerbert Xue
3410*dc5640d1SHerbert Xue @deprecated use {@link FactoryModuleBuilder} instead.]]>
3411*dc5640d1SHerbert Xue    </doc>
3412*dc5640d1SHerbert Xue  </class>
3413*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3414*dc5640d1SHerbert Xue</package>
3415*dc5640d1SHerbert Xue<package name="com.google.inject.binder">
3416*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3417*dc5640d1SHerbert Xue  <interface name="AnnotatedBindingBuilder"    abstract="true"
3418*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3419*dc5640d1SHerbert Xue    deprecated="not deprecated">
3420*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3421*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3422*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3423*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3424*dc5640d1SHerbert Xue      deprecated="not deprecated">
3425*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3426*dc5640d1SHerbert Xue      <doc>
3427*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3428*dc5640d1SHerbert Xue      </doc>
3429*dc5640d1SHerbert Xue    </method>
3430*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3431*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3432*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3433*dc5640d1SHerbert Xue      deprecated="not deprecated">
3434*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3435*dc5640d1SHerbert Xue      <doc>
3436*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3437*dc5640d1SHerbert Xue      </doc>
3438*dc5640d1SHerbert Xue    </method>
3439*dc5640d1SHerbert Xue    <doc>
3440*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3441*dc5640d1SHerbert Xue
3442*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3443*dc5640d1SHerbert Xue    </doc>
3444*dc5640d1SHerbert Xue  </interface>
3445*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3446*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3447*dc5640d1SHerbert Xue  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3448*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3449*dc5640d1SHerbert Xue    deprecated="not deprecated">
3450*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3451*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3452*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3453*dc5640d1SHerbert Xue      deprecated="not deprecated">
3454*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3455*dc5640d1SHerbert Xue      <doc>
3456*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3457*dc5640d1SHerbert Xue      </doc>
3458*dc5640d1SHerbert Xue    </method>
3459*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3460*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3461*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3462*dc5640d1SHerbert Xue      deprecated="not deprecated">
3463*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3464*dc5640d1SHerbert Xue      <doc>
3465*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3466*dc5640d1SHerbert Xue      </doc>
3467*dc5640d1SHerbert Xue    </method>
3468*dc5640d1SHerbert Xue    <doc>
3469*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3470*dc5640d1SHerbert Xue
3471*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3472*dc5640d1SHerbert Xue    </doc>
3473*dc5640d1SHerbert Xue  </interface>
3474*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3475*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3476*dc5640d1SHerbert Xue  <interface name="AnnotatedElementBuilder"    abstract="true"
3477*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3478*dc5640d1SHerbert Xue    deprecated="not deprecated">
3479*dc5640d1SHerbert Xue    <method name="annotatedWith"
3480*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3481*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3482*dc5640d1SHerbert Xue      deprecated="not deprecated">
3483*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3484*dc5640d1SHerbert Xue      <doc>
3485*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3486*dc5640d1SHerbert Xue      </doc>
3487*dc5640d1SHerbert Xue    </method>
3488*dc5640d1SHerbert Xue    <method name="annotatedWith"
3489*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3490*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3491*dc5640d1SHerbert Xue      deprecated="not deprecated">
3492*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3493*dc5640d1SHerbert Xue      <doc>
3494*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3495*dc5640d1SHerbert Xue      </doc>
3496*dc5640d1SHerbert Xue    </method>
3497*dc5640d1SHerbert Xue    <doc>
3498*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3499*dc5640d1SHerbert Xue
3500*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3501*dc5640d1SHerbert Xue @since 2.0]]>
3502*dc5640d1SHerbert Xue    </doc>
3503*dc5640d1SHerbert Xue  </interface>
3504*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3505*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3506*dc5640d1SHerbert Xue  <interface name="ConstantBindingBuilder"    abstract="true"
3507*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3508*dc5640d1SHerbert Xue    deprecated="not deprecated">
3509*dc5640d1SHerbert Xue    <method name="to"
3510*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3511*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3512*dc5640d1SHerbert Xue      deprecated="not deprecated">
3513*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
3514*dc5640d1SHerbert Xue      <doc>
3515*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3516*dc5640d1SHerbert Xue      </doc>
3517*dc5640d1SHerbert Xue    </method>
3518*dc5640d1SHerbert Xue    <method name="to"
3519*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3520*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3521*dc5640d1SHerbert Xue      deprecated="not deprecated">
3522*dc5640d1SHerbert Xue      <param name="value" type="int"/>
3523*dc5640d1SHerbert Xue      <doc>
3524*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3525*dc5640d1SHerbert Xue      </doc>
3526*dc5640d1SHerbert Xue    </method>
3527*dc5640d1SHerbert Xue    <method name="to"
3528*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3529*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3530*dc5640d1SHerbert Xue      deprecated="not deprecated">
3531*dc5640d1SHerbert Xue      <param name="value" type="long"/>
3532*dc5640d1SHerbert Xue      <doc>
3533*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3534*dc5640d1SHerbert Xue      </doc>
3535*dc5640d1SHerbert Xue    </method>
3536*dc5640d1SHerbert Xue    <method name="to"
3537*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3538*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3539*dc5640d1SHerbert Xue      deprecated="not deprecated">
3540*dc5640d1SHerbert Xue      <param name="value" type="boolean"/>
3541*dc5640d1SHerbert Xue      <doc>
3542*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3543*dc5640d1SHerbert Xue      </doc>
3544*dc5640d1SHerbert Xue    </method>
3545*dc5640d1SHerbert Xue    <method name="to"
3546*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3547*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3548*dc5640d1SHerbert Xue      deprecated="not deprecated">
3549*dc5640d1SHerbert Xue      <param name="value" type="double"/>
3550*dc5640d1SHerbert Xue      <doc>
3551*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3552*dc5640d1SHerbert Xue      </doc>
3553*dc5640d1SHerbert Xue    </method>
3554*dc5640d1SHerbert Xue    <method name="to"
3555*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3556*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3557*dc5640d1SHerbert Xue      deprecated="not deprecated">
3558*dc5640d1SHerbert Xue      <param name="value" type="float"/>
3559*dc5640d1SHerbert Xue      <doc>
3560*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3561*dc5640d1SHerbert Xue      </doc>
3562*dc5640d1SHerbert Xue    </method>
3563*dc5640d1SHerbert Xue    <method name="to"
3564*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3565*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3566*dc5640d1SHerbert Xue      deprecated="not deprecated">
3567*dc5640d1SHerbert Xue      <param name="value" type="short"/>
3568*dc5640d1SHerbert Xue      <doc>
3569*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3570*dc5640d1SHerbert Xue      </doc>
3571*dc5640d1SHerbert Xue    </method>
3572*dc5640d1SHerbert Xue    <method name="to"
3573*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3574*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3575*dc5640d1SHerbert Xue      deprecated="not deprecated">
3576*dc5640d1SHerbert Xue      <param name="value" type="char"/>
3577*dc5640d1SHerbert Xue      <doc>
3578*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3579*dc5640d1SHerbert Xue      </doc>
3580*dc5640d1SHerbert Xue    </method>
3581*dc5640d1SHerbert Xue    <method name="to"
3582*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3583*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3584*dc5640d1SHerbert Xue      deprecated="not deprecated">
3585*dc5640d1SHerbert Xue      <param name="value" type="byte"/>
3586*dc5640d1SHerbert Xue      <doc>
3587*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.
3588*dc5640d1SHerbert Xue
3589*dc5640d1SHerbert Xue @since 3.0]]>
3590*dc5640d1SHerbert Xue      </doc>
3591*dc5640d1SHerbert Xue    </method>
3592*dc5640d1SHerbert Xue    <method name="to"
3593*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3594*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3595*dc5640d1SHerbert Xue      deprecated="not deprecated">
3596*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3597*dc5640d1SHerbert Xue      <doc>
3598*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3599*dc5640d1SHerbert Xue      </doc>
3600*dc5640d1SHerbert Xue    </method>
3601*dc5640d1SHerbert Xue    <method name="to"
3602*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3603*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3604*dc5640d1SHerbert Xue      deprecated="not deprecated">
3605*dc5640d1SHerbert Xue      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3606*dc5640d1SHerbert Xue      <doc>
3607*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3608*dc5640d1SHerbert Xue      </doc>
3609*dc5640d1SHerbert Xue    </method>
3610*dc5640d1SHerbert Xue    <doc>
3611*dc5640d1SHerbert Xue    <![CDATA[Binds to a constant value.]]>
3612*dc5640d1SHerbert Xue    </doc>
3613*dc5640d1SHerbert Xue  </interface>
3614*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3615*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3616*dc5640d1SHerbert Xue  <interface name="LinkedBindingBuilder"    abstract="true"
3617*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3618*dc5640d1SHerbert Xue    deprecated="not deprecated">
3619*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3620*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3621*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3622*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3623*dc5640d1SHerbert Xue      deprecated="not deprecated">
3624*dc5640d1SHerbert Xue      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3625*dc5640d1SHerbert Xue      <doc>
3626*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3627*dc5640d1SHerbert Xue      </doc>
3628*dc5640d1SHerbert Xue    </method>
3629*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3630*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3631*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3632*dc5640d1SHerbert Xue      deprecated="not deprecated">
3633*dc5640d1SHerbert Xue      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3634*dc5640d1SHerbert Xue      <doc>
3635*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3636*dc5640d1SHerbert Xue      </doc>
3637*dc5640d1SHerbert Xue    </method>
3638*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3639*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3640*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3641*dc5640d1SHerbert Xue      deprecated="not deprecated">
3642*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3643*dc5640d1SHerbert Xue      <doc>
3644*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3645*dc5640d1SHerbert Xue      </doc>
3646*dc5640d1SHerbert Xue    </method>
3647*dc5640d1SHerbert Xue    <method name="toInstance"
3648*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3649*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3650*dc5640d1SHerbert Xue      deprecated="not deprecated">
3651*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
3652*dc5640d1SHerbert Xue      <doc>
3653*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3654*dc5640d1SHerbert Xue
3655*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3656*dc5640d1SHerbert Xue      </doc>
3657*dc5640d1SHerbert Xue    </method>
3658*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3659*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3660*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3661*dc5640d1SHerbert Xue      deprecated="not deprecated">
3662*dc5640d1SHerbert Xue      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3663*dc5640d1SHerbert Xue      <doc>
3664*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3665*dc5640d1SHerbert Xue
3666*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3667*dc5640d1SHerbert Xue      </doc>
3668*dc5640d1SHerbert Xue    </method>
3669*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3670*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3671*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3672*dc5640d1SHerbert Xue      deprecated="not deprecated">
3673*dc5640d1SHerbert Xue      <param name="provider" type="javax.inject.Provider&lt;? extends T&gt;"/>
3674*dc5640d1SHerbert Xue      <doc>
3675*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3676*dc5640d1SHerbert Xue
3677*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers
3678*dc5640d1SHerbert Xue @since 4.0]]>
3679*dc5640d1SHerbert Xue      </doc>
3680*dc5640d1SHerbert Xue    </method>
3681*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3682*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3683*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3684*dc5640d1SHerbert Xue      deprecated="not deprecated">
3685*dc5640d1SHerbert Xue      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3686*dc5640d1SHerbert Xue      <doc>
3687*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3688*dc5640d1SHerbert Xue      </doc>
3689*dc5640d1SHerbert Xue    </method>
3690*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3691*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3692*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3693*dc5640d1SHerbert Xue      deprecated="not deprecated">
3694*dc5640d1SHerbert Xue      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3695*dc5640d1SHerbert Xue      <doc>
3696*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3697*dc5640d1SHerbert Xue      </doc>
3698*dc5640d1SHerbert Xue    </method>
3699*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3700*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3701*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3702*dc5640d1SHerbert Xue      deprecated="not deprecated">
3703*dc5640d1SHerbert Xue      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3704*dc5640d1SHerbert Xue      <doc>
3705*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3706*dc5640d1SHerbert Xue      </doc>
3707*dc5640d1SHerbert Xue    </method>
3708*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3709*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3710*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3711*dc5640d1SHerbert Xue      deprecated="not deprecated">
3712*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3713*dc5640d1SHerbert Xue      <doc>
3714*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3715*dc5640d1SHerbert Xue
3716*dc5640d1SHerbert Xue @since 3.0]]>
3717*dc5640d1SHerbert Xue      </doc>
3718*dc5640d1SHerbert Xue    </method>
3719*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3720*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3721*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3722*dc5640d1SHerbert Xue      deprecated="not deprecated">
3723*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3724*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3725*dc5640d1SHerbert Xue      <doc>
3726*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3727*dc5640d1SHerbert Xue
3728*dc5640d1SHerbert Xue @since 3.0]]>
3729*dc5640d1SHerbert Xue      </doc>
3730*dc5640d1SHerbert Xue    </method>
3731*dc5640d1SHerbert Xue    <doc>
3732*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3733*dc5640d1SHerbert Xue
3734*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3735*dc5640d1SHerbert Xue    </doc>
3736*dc5640d1SHerbert Xue  </interface>
3737*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3738*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3739*dc5640d1SHerbert Xue  <interface name="ScopedBindingBuilder"    abstract="true"
3740*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3741*dc5640d1SHerbert Xue    deprecated="not deprecated">
3742*dc5640d1SHerbert Xue    <method name="in"
3743*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3744*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3745*dc5640d1SHerbert Xue      deprecated="not deprecated">
3746*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3747*dc5640d1SHerbert Xue      <doc>
3748*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3749*dc5640d1SHerbert Xue      </doc>
3750*dc5640d1SHerbert Xue    </method>
3751*dc5640d1SHerbert Xue    <method name="in"
3752*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3753*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3754*dc5640d1SHerbert Xue      deprecated="not deprecated">
3755*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
3756*dc5640d1SHerbert Xue      <doc>
3757*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3758*dc5640d1SHerbert Xue      </doc>
3759*dc5640d1SHerbert Xue    </method>
3760*dc5640d1SHerbert Xue    <method name="asEagerSingleton"
3761*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3762*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3763*dc5640d1SHerbert Xue      deprecated="not deprecated">
3764*dc5640d1SHerbert Xue      <doc>
3765*dc5640d1SHerbert Xue      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3766*dc5640d1SHerbert Xue singleton-scoped binding upon creation. Useful for application
3767*dc5640d1SHerbert Xue initialization logic.  See the EDSL examples at
3768*dc5640d1SHerbert Xue {@link com.google.inject.Binder}.]]>
3769*dc5640d1SHerbert Xue      </doc>
3770*dc5640d1SHerbert Xue    </method>
3771*dc5640d1SHerbert Xue    <doc>
3772*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3773*dc5640d1SHerbert Xue
3774*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3775*dc5640d1SHerbert Xue    </doc>
3776*dc5640d1SHerbert Xue  </interface>
3777*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3778*dc5640d1SHerbert Xue</package>
3779*dc5640d1SHerbert Xue<package name="com.google.inject.daggeradapter">
3780*dc5640d1SHerbert Xue  <!-- start class com.google.inject.daggeradapter.DaggerAdapter -->
3781*dc5640d1SHerbert Xue  <class name="DaggerAdapter" extends="java.lang.Object"
3782*dc5640d1SHerbert Xue    abstract="false"
3783*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
3784*dc5640d1SHerbert Xue    deprecated="not deprecated">
3785*dc5640d1SHerbert Xue    <method name="from" return="com.google.inject.Module"
3786*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3787*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3788*dc5640d1SHerbert Xue      deprecated="not deprecated">
3789*dc5640d1SHerbert Xue      <param name="daggerModuleObjects" type="java.lang.Object[]"/>
3790*dc5640d1SHerbert Xue      <doc>
3791*dc5640d1SHerbert Xue      <![CDATA[Returns a guice module from a dagger module.
3792*dc5640d1SHerbert Xue
3793*dc5640d1SHerbert Xue <p>Note: At present, it does not honor {@code @Module(includes=...)} directives.]]>
3794*dc5640d1SHerbert Xue      </doc>
3795*dc5640d1SHerbert Xue    </method>
3796*dc5640d1SHerbert Xue    <doc>
3797*dc5640d1SHerbert Xue    <![CDATA[A utility to adapt classes annotated with {@link @dagger.Module} such that their
3798*dc5640d1SHerbert Xue {@link @dagger.Provides} methods can be properly invoked by Guice to perform their
3799*dc5640d1SHerbert Xue provision operations.
3800*dc5640d1SHerbert Xue
3801*dc5640d1SHerbert Xue <p>Simple example: <pre>{@code
3802*dc5640d1SHerbert Xue   Guice.createInjector(...other modules..., DaggerAdapter.from(new SomeDaggerAdapter()));
3803*dc5640d1SHerbert Xue }</pre>
3804*dc5640d1SHerbert Xue
3805*dc5640d1SHerbert Xue <p>Some notes on usage and compatibility.
3806*dc5640d1SHerbert Xue   <ul>
3807*dc5640d1SHerbert Xue     <li>Dagger provider methods have a "SET_VALUES" provision mode not supported by Guice.
3808*dc5640d1SHerbert Xue     <li>MapBindings are not yet implemented (pending).
3809*dc5640d1SHerbert Xue     <li>Be careful about stateful modules. In contrast to Dagger (where components are
3810*dc5640d1SHerbert Xue         expected to be recreated on-demand with new Module instances), Guice typically
3811*dc5640d1SHerbert Xue         has a single injector with a long lifetime, so your module instance will be used
3812*dc5640d1SHerbert Xue         throughout the lifetime of the entire app.
3813*dc5640d1SHerbert Xue     <li>Dagger 1.x uses {@link @Singleton} for all scopes, including shorter-lived scopes
3814*dc5640d1SHerbert Xue         like per-request or per-activity.  Using modules written with Dagger 1.x usage
3815*dc5640d1SHerbert Xue         in mind may result in mis-scoped objects.
3816*dc5640d1SHerbert Xue     <li>Dagger 2.x supports custom scope annotations, but for use in Guice, a custom scope
3817*dc5640d1SHerbert Xue         implementation must be registered in order to support the custom lifetime of that
3818*dc5640d1SHerbert Xue         annotation.
3819*dc5640d1SHerbert Xue   </ul>
3820*dc5640d1SHerbert Xue
3821*dc5640d1SHerbert Xue @author [email protected] (Christian Gruber)]]>
3822*dc5640d1SHerbert Xue    </doc>
3823*dc5640d1SHerbert Xue  </class>
3824*dc5640d1SHerbert Xue  <!-- end class com.google.inject.daggeradapter.DaggerAdapter -->
3825*dc5640d1SHerbert Xue</package>
3826*dc5640d1SHerbert Xue<package name="com.google.inject.grapher">
3827*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher -->
3828*dc5640d1SHerbert Xue  <class name="AbstractInjectorGrapher" extends="java.lang.Object"
3829*dc5640d1SHerbert Xue    abstract="true"
3830*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3831*dc5640d1SHerbert Xue    deprecated="not deprecated">
3832*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.InjectorGrapher"/>
3833*dc5640d1SHerbert Xue    <constructor name="AbstractInjectorGrapher"
3834*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3835*dc5640d1SHerbert Xue      deprecated="not deprecated">
3836*dc5640d1SHerbert Xue    </constructor>
3837*dc5640d1SHerbert Xue    <constructor name="AbstractInjectorGrapher" type="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3838*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3839*dc5640d1SHerbert Xue      deprecated="not deprecated">
3840*dc5640d1SHerbert Xue    </constructor>
3841*dc5640d1SHerbert Xue    <method name="graph"
3842*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3843*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
3844*dc5640d1SHerbert Xue      deprecated="not deprecated">
3845*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
3846*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3847*dc5640d1SHerbert Xue    </method>
3848*dc5640d1SHerbert Xue    <method name="graph"
3849*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3850*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
3851*dc5640d1SHerbert Xue      deprecated="not deprecated">
3852*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
3853*dc5640d1SHerbert Xue      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
3854*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3855*dc5640d1SHerbert Xue    </method>
3856*dc5640d1SHerbert Xue    <method name="reset"
3857*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3858*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3859*dc5640d1SHerbert Xue      deprecated="not deprecated">
3860*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3861*dc5640d1SHerbert Xue      <doc>
3862*dc5640d1SHerbert Xue      <![CDATA[Resets the state of the grapher before rendering a new graph.]]>
3863*dc5640d1SHerbert Xue      </doc>
3864*dc5640d1SHerbert Xue    </method>
3865*dc5640d1SHerbert Xue    <method name="newInterfaceNode"
3866*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3867*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3868*dc5640d1SHerbert Xue      deprecated="not deprecated">
3869*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
3870*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3871*dc5640d1SHerbert Xue      <doc>
3872*dc5640d1SHerbert Xue      <![CDATA[Adds a new interface node to the graph.]]>
3873*dc5640d1SHerbert Xue      </doc>
3874*dc5640d1SHerbert Xue    </method>
3875*dc5640d1SHerbert Xue    <method name="newImplementationNode"
3876*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3877*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3878*dc5640d1SHerbert Xue      deprecated="not deprecated">
3879*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
3880*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3881*dc5640d1SHerbert Xue      <doc>
3882*dc5640d1SHerbert Xue      <![CDATA[Adds a new implementation node to the graph.]]>
3883*dc5640d1SHerbert Xue      </doc>
3884*dc5640d1SHerbert Xue    </method>
3885*dc5640d1SHerbert Xue    <method name="newInstanceNode"
3886*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3887*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3888*dc5640d1SHerbert Xue      deprecated="not deprecated">
3889*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
3890*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3891*dc5640d1SHerbert Xue      <doc>
3892*dc5640d1SHerbert Xue      <![CDATA[Adds a new instance node to the graph.]]>
3893*dc5640d1SHerbert Xue      </doc>
3894*dc5640d1SHerbert Xue    </method>
3895*dc5640d1SHerbert Xue    <method name="newDependencyEdge"
3896*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3897*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3898*dc5640d1SHerbert Xue      deprecated="not deprecated">
3899*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
3900*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3901*dc5640d1SHerbert Xue      <doc>
3902*dc5640d1SHerbert Xue      <![CDATA[Adds a new dependency edge to the graph.]]>
3903*dc5640d1SHerbert Xue      </doc>
3904*dc5640d1SHerbert Xue    </method>
3905*dc5640d1SHerbert Xue    <method name="newBindingEdge"
3906*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3907*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3908*dc5640d1SHerbert Xue      deprecated="not deprecated">
3909*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
3910*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3911*dc5640d1SHerbert Xue      <doc>
3912*dc5640d1SHerbert Xue      <![CDATA[Adds a new binding edge to the graph.]]>
3913*dc5640d1SHerbert Xue      </doc>
3914*dc5640d1SHerbert Xue    </method>
3915*dc5640d1SHerbert Xue    <method name="postProcess"
3916*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3917*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3918*dc5640d1SHerbert Xue      deprecated="not deprecated">
3919*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3920*dc5640d1SHerbert Xue      <doc>
3921*dc5640d1SHerbert Xue      <![CDATA[Performs any post processing required after all nodes and edges have been added.]]>
3922*dc5640d1SHerbert Xue      </doc>
3923*dc5640d1SHerbert Xue    </method>
3924*dc5640d1SHerbert Xue    <doc>
3925*dc5640d1SHerbert Xue    <![CDATA[Abstract injector grapher that builds the dependency graph but doesn't render it.
3926*dc5640d1SHerbert Xue
3927*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
3928*dc5640d1SHerbert Xue @since 4.0]]>
3929*dc5640d1SHerbert Xue    </doc>
3930*dc5640d1SHerbert Xue  </class>
3931*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher -->
3932*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3933*dc5640d1SHerbert Xue  <class name="AbstractInjectorGrapher.GrapherParameters" extends="java.lang.Object"
3934*dc5640d1SHerbert Xue    abstract="false"
3935*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
3936*dc5640d1SHerbert Xue    deprecated="not deprecated">
3937*dc5640d1SHerbert Xue    <constructor name="GrapherParameters"
3938*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3939*dc5640d1SHerbert Xue      deprecated="not deprecated">
3940*dc5640d1SHerbert Xue    </constructor>
3941*dc5640d1SHerbert Xue    <method name="getRootKeySetCreator" return="com.google.inject.grapher.RootKeySetCreator"
3942*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3943*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3944*dc5640d1SHerbert Xue      deprecated="not deprecated">
3945*dc5640d1SHerbert Xue    </method>
3946*dc5640d1SHerbert Xue    <method name="setRootKeySetCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3947*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3948*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3949*dc5640d1SHerbert Xue      deprecated="not deprecated">
3950*dc5640d1SHerbert Xue      <param name="rootKeySetCreator" type="com.google.inject.grapher.RootKeySetCreator"/>
3951*dc5640d1SHerbert Xue    </method>
3952*dc5640d1SHerbert Xue    <method name="getAliasCreator" return="com.google.inject.grapher.AliasCreator"
3953*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3954*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3955*dc5640d1SHerbert Xue      deprecated="not deprecated">
3956*dc5640d1SHerbert Xue    </method>
3957*dc5640d1SHerbert Xue    <method name="setAliasCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3958*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3959*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3960*dc5640d1SHerbert Xue      deprecated="not deprecated">
3961*dc5640d1SHerbert Xue      <param name="aliasCreator" type="com.google.inject.grapher.AliasCreator"/>
3962*dc5640d1SHerbert Xue    </method>
3963*dc5640d1SHerbert Xue    <method name="getNodeCreator" return="com.google.inject.grapher.NodeCreator"
3964*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3965*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3966*dc5640d1SHerbert Xue      deprecated="not deprecated">
3967*dc5640d1SHerbert Xue    </method>
3968*dc5640d1SHerbert Xue    <method name="setNodeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3969*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3971*dc5640d1SHerbert Xue      deprecated="not deprecated">
3972*dc5640d1SHerbert Xue      <param name="nodeCreator" type="com.google.inject.grapher.NodeCreator"/>
3973*dc5640d1SHerbert Xue    </method>
3974*dc5640d1SHerbert Xue    <method name="getEdgeCreator" return="com.google.inject.grapher.EdgeCreator"
3975*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3976*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3977*dc5640d1SHerbert Xue      deprecated="not deprecated">
3978*dc5640d1SHerbert Xue    </method>
3979*dc5640d1SHerbert Xue    <method name="setEdgeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3980*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3981*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3982*dc5640d1SHerbert Xue      deprecated="not deprecated">
3983*dc5640d1SHerbert Xue      <param name="edgeCreator" type="com.google.inject.grapher.EdgeCreator"/>
3984*dc5640d1SHerbert Xue    </method>
3985*dc5640d1SHerbert Xue    <doc>
3986*dc5640d1SHerbert Xue    <![CDATA[Parameters used to override default settings of the grapher.
3987*dc5640d1SHerbert Xue @since 4.0]]>
3988*dc5640d1SHerbert Xue    </doc>
3989*dc5640d1SHerbert Xue  </class>
3990*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3991*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Alias -->
3992*dc5640d1SHerbert Xue  <class name="Alias" extends="java.lang.Object"
3993*dc5640d1SHerbert Xue    abstract="false"
3994*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
3995*dc5640d1SHerbert Xue    deprecated="not deprecated">
3996*dc5640d1SHerbert Xue    <constructor name="Alias" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
3997*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3998*dc5640d1SHerbert Xue      deprecated="not deprecated">
3999*dc5640d1SHerbert Xue    </constructor>
4000*dc5640d1SHerbert Xue    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4002*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4003*dc5640d1SHerbert Xue      deprecated="not deprecated">
4004*dc5640d1SHerbert Xue    </method>
4005*dc5640d1SHerbert Xue    <method name="getToId" return="com.google.inject.grapher.NodeId"
4006*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4007*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4008*dc5640d1SHerbert Xue      deprecated="not deprecated">
4009*dc5640d1SHerbert Xue    </method>
4010*dc5640d1SHerbert Xue    <doc>
4011*dc5640d1SHerbert Xue    <![CDATA[Alias between two nodes. Causes the 'from' node to be aliased with the 'to' node, which means
4012*dc5640d1SHerbert Xue that the 'from' node is not rendered and all edges going to it instead go to the 'to' node.
4013*dc5640d1SHerbert Xue
4014*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4015*dc5640d1SHerbert Xue @since 4.0]]>
4016*dc5640d1SHerbert Xue    </doc>
4017*dc5640d1SHerbert Xue  </class>
4018*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Alias -->
4019*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.AliasCreator -->
4020*dc5640d1SHerbert Xue  <interface name="AliasCreator"    abstract="true"
4021*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4022*dc5640d1SHerbert Xue    deprecated="not deprecated">
4023*dc5640d1SHerbert Xue    <method name="createAliases" return="java.lang.Iterable&lt;com.google.inject.grapher.Alias&gt;"
4024*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4025*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4026*dc5640d1SHerbert Xue      deprecated="not deprecated">
4027*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4028*dc5640d1SHerbert Xue      <doc>
4029*dc5640d1SHerbert Xue      <![CDATA[Returns aliases for the given dependency graph. The aliases do not need to be transitively
4030*dc5640d1SHerbert Xue resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
4031*dc5640d1SHerbert Xue responsibility of the caller to resolve this to (X to Z) and (Y to Z).
4032*dc5640d1SHerbert Xue
4033*dc5640d1SHerbert Xue @param bindings bindings that make up the dependency graph
4034*dc5640d1SHerbert Xue @return aliases that should be applied on the graph]]>
4035*dc5640d1SHerbert Xue      </doc>
4036*dc5640d1SHerbert Xue    </method>
4037*dc5640d1SHerbert Xue    <doc>
4038*dc5640d1SHerbert Xue    <![CDATA[Creator of node aliases. Used by dependency graphers to merge nodes in the internal Guice graph
4039*dc5640d1SHerbert Xue into a single node on the rendered graph.
4040*dc5640d1SHerbert Xue
4041*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4042*dc5640d1SHerbert Xue @since 4.0]]>
4043*dc5640d1SHerbert Xue    </doc>
4044*dc5640d1SHerbert Xue  </interface>
4045*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.AliasCreator -->
4046*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.BindingEdge -->
4047*dc5640d1SHerbert Xue  <class name="BindingEdge" extends="com.google.inject.grapher.Edge"
4048*dc5640d1SHerbert Xue    abstract="false"
4049*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4050*dc5640d1SHerbert Xue    deprecated="not deprecated">
4051*dc5640d1SHerbert Xue    <constructor name="BindingEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.grapher.BindingEdge.Type"
4052*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4053*dc5640d1SHerbert Xue      deprecated="not deprecated">
4054*dc5640d1SHerbert Xue    </constructor>
4055*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.grapher.BindingEdge.Type"
4056*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4057*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4058*dc5640d1SHerbert Xue      deprecated="not deprecated">
4059*dc5640d1SHerbert Xue    </method>
4060*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4061*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4062*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4063*dc5640d1SHerbert Xue      deprecated="not deprecated">
4064*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4065*dc5640d1SHerbert Xue    </method>
4066*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4067*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4068*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4069*dc5640d1SHerbert Xue      deprecated="not deprecated">
4070*dc5640d1SHerbert Xue    </method>
4071*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4072*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4073*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4074*dc5640d1SHerbert Xue      deprecated="not deprecated">
4075*dc5640d1SHerbert Xue    </method>
4076*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4077*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4078*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4079*dc5640d1SHerbert Xue      deprecated="not deprecated">
4080*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4081*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4082*dc5640d1SHerbert Xue    </method>
4083*dc5640d1SHerbert Xue    <doc>
4084*dc5640d1SHerbert Xue    <![CDATA[Edge that connects an interface to the type or instance that is bound to implement it.
4085*dc5640d1SHerbert Xue
4086*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4087*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4088*dc5640d1SHerbert Xue    </doc>
4089*dc5640d1SHerbert Xue  </class>
4090*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.BindingEdge -->
4091*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
4092*dc5640d1SHerbert Xue  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
4093*dc5640d1SHerbert Xue    abstract="false"
4094*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
4095*dc5640d1SHerbert Xue    deprecated="not deprecated">
4096*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
4097*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4098*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4099*dc5640d1SHerbert Xue      deprecated="not deprecated">
4100*dc5640d1SHerbert Xue    </method>
4101*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
4102*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4103*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4104*dc5640d1SHerbert Xue      deprecated="not deprecated">
4105*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4106*dc5640d1SHerbert Xue    </method>
4107*dc5640d1SHerbert Xue    <doc>
4108*dc5640d1SHerbert Xue    <![CDATA[Classification for what kind of binding this edge represents.]]>
4109*dc5640d1SHerbert Xue    </doc>
4110*dc5640d1SHerbert Xue  </class>
4111*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
4112*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.DefaultRootKeySetCreator -->
4113*dc5640d1SHerbert Xue  <class name="DefaultRootKeySetCreator" extends="java.lang.Object"
4114*dc5640d1SHerbert Xue    abstract="false"
4115*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4116*dc5640d1SHerbert Xue    deprecated="not deprecated">
4117*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.RootKeySetCreator"/>
4118*dc5640d1SHerbert Xue    <constructor name="DefaultRootKeySetCreator"
4119*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4120*dc5640d1SHerbert Xue      deprecated="not deprecated">
4121*dc5640d1SHerbert Xue    </constructor>
4122*dc5640d1SHerbert Xue    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4123*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4124*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4125*dc5640d1SHerbert Xue      deprecated="not deprecated">
4126*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4127*dc5640d1SHerbert Xue    </method>
4128*dc5640d1SHerbert Xue    <doc>
4129*dc5640d1SHerbert Xue    <![CDATA[Root key set creator that starts with all types that are not Guice internal types or the
4130*dc5640d1SHerbert Xue {@link Logger} type.
4131*dc5640d1SHerbert Xue
4132*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4133*dc5640d1SHerbert Xue @since 4.0]]>
4134*dc5640d1SHerbert Xue    </doc>
4135*dc5640d1SHerbert Xue  </class>
4136*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.DefaultRootKeySetCreator -->
4137*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.DependencyEdge -->
4138*dc5640d1SHerbert Xue  <class name="DependencyEdge" extends="com.google.inject.grapher.Edge"
4139*dc5640d1SHerbert Xue    abstract="false"
4140*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4141*dc5640d1SHerbert Xue    deprecated="not deprecated">
4142*dc5640d1SHerbert Xue    <constructor name="DependencyEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.spi.InjectionPoint"
4143*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4144*dc5640d1SHerbert Xue      deprecated="not deprecated">
4145*dc5640d1SHerbert Xue    </constructor>
4146*dc5640d1SHerbert Xue    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
4147*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4148*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4149*dc5640d1SHerbert Xue      deprecated="not deprecated">
4150*dc5640d1SHerbert Xue    </method>
4151*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4152*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4153*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4154*dc5640d1SHerbert Xue      deprecated="not deprecated">
4155*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4156*dc5640d1SHerbert Xue    </method>
4157*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4158*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4159*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4160*dc5640d1SHerbert Xue      deprecated="not deprecated">
4161*dc5640d1SHerbert Xue    </method>
4162*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4163*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4164*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4165*dc5640d1SHerbert Xue      deprecated="not deprecated">
4166*dc5640d1SHerbert Xue    </method>
4167*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4168*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4169*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4170*dc5640d1SHerbert Xue      deprecated="not deprecated">
4171*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4172*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4173*dc5640d1SHerbert Xue    </method>
4174*dc5640d1SHerbert Xue    <doc>
4175*dc5640d1SHerbert Xue    <![CDATA[Edge from a class or {@link InjectionPoint} to the interface node that will satisfy the
4176*dc5640d1SHerbert Xue dependency.
4177*dc5640d1SHerbert Xue
4178*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4179*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4180*dc5640d1SHerbert Xue    </doc>
4181*dc5640d1SHerbert Xue  </class>
4182*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.DependencyEdge -->
4183*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Edge -->
4184*dc5640d1SHerbert Xue  <class name="Edge" extends="java.lang.Object"
4185*dc5640d1SHerbert Xue    abstract="true"
4186*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4187*dc5640d1SHerbert Xue    deprecated="not deprecated">
4188*dc5640d1SHerbert Xue    <constructor name="Edge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4189*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4190*dc5640d1SHerbert Xue      deprecated="not deprecated">
4191*dc5640d1SHerbert Xue    </constructor>
4192*dc5640d1SHerbert Xue    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4193*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4194*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4195*dc5640d1SHerbert Xue      deprecated="not deprecated">
4196*dc5640d1SHerbert Xue    </method>
4197*dc5640d1SHerbert Xue    <method name="getToId" return="com.google.inject.grapher.NodeId"
4198*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4199*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4200*dc5640d1SHerbert Xue      deprecated="not deprecated">
4201*dc5640d1SHerbert Xue    </method>
4202*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4203*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4204*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4205*dc5640d1SHerbert Xue      deprecated="not deprecated">
4206*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4207*dc5640d1SHerbert Xue    </method>
4208*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4209*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4210*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4211*dc5640d1SHerbert Xue      deprecated="not deprecated">
4212*dc5640d1SHerbert Xue    </method>
4213*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4214*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4215*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4216*dc5640d1SHerbert Xue      deprecated="not deprecated">
4217*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4218*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4219*dc5640d1SHerbert Xue      <doc>
4220*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of the edge with new node IDs.
4221*dc5640d1SHerbert Xue
4222*dc5640d1SHerbert Xue @param fromId new ID of the 'from' node
4223*dc5640d1SHerbert Xue @param toId new ID of the 'to' node
4224*dc5640d1SHerbert Xue @return copy of the edge with the new node IDs]]>
4225*dc5640d1SHerbert Xue      </doc>
4226*dc5640d1SHerbert Xue    </method>
4227*dc5640d1SHerbert Xue    <doc>
4228*dc5640d1SHerbert Xue    <![CDATA[Edge in a guice dependency graph.
4229*dc5640d1SHerbert Xue
4230*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4231*dc5640d1SHerbert Xue @since 4.0]]>
4232*dc5640d1SHerbert Xue    </doc>
4233*dc5640d1SHerbert Xue  </class>
4234*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Edge -->
4235*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.EdgeCreator -->
4236*dc5640d1SHerbert Xue  <interface name="EdgeCreator"    abstract="true"
4237*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4238*dc5640d1SHerbert Xue    deprecated="not deprecated">
4239*dc5640d1SHerbert Xue    <method name="getEdges" return="java.lang.Iterable&lt;com.google.inject.grapher.Edge&gt;"
4240*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4241*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4242*dc5640d1SHerbert Xue      deprecated="not deprecated">
4243*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4244*dc5640d1SHerbert Xue      <doc>
4245*dc5640d1SHerbert Xue      <![CDATA[Returns edges for the given dependency graph.]]>
4246*dc5640d1SHerbert Xue      </doc>
4247*dc5640d1SHerbert Xue    </method>
4248*dc5640d1SHerbert Xue    <doc>
4249*dc5640d1SHerbert Xue    <![CDATA[Creator of graph edges to render. All edges will be rendered on the graph after node aliasing is
4250*dc5640d1SHerbert Xue performed.
4251*dc5640d1SHerbert Xue
4252*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4253*dc5640d1SHerbert Xue @since 4.0]]>
4254*dc5640d1SHerbert Xue    </doc>
4255*dc5640d1SHerbert Xue  </interface>
4256*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.EdgeCreator -->
4257*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.ImplementationNode -->
4258*dc5640d1SHerbert Xue  <class name="ImplementationNode" extends="com.google.inject.grapher.Node"
4259*dc5640d1SHerbert Xue    abstract="false"
4260*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4261*dc5640d1SHerbert Xue    deprecated="not deprecated">
4262*dc5640d1SHerbert Xue    <constructor name="ImplementationNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.util.Collection&lt;java.lang.reflect.Member&gt;"
4263*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4264*dc5640d1SHerbert Xue      deprecated="not deprecated">
4265*dc5640d1SHerbert Xue    </constructor>
4266*dc5640d1SHerbert Xue    <method name="getMembers" return="java.util.Collection&lt;java.lang.reflect.Member&gt;"
4267*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4268*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4269*dc5640d1SHerbert Xue      deprecated="not deprecated">
4270*dc5640d1SHerbert Xue    </method>
4271*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4272*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4273*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4274*dc5640d1SHerbert Xue      deprecated="not deprecated">
4275*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4276*dc5640d1SHerbert Xue    </method>
4277*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4278*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4279*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4280*dc5640d1SHerbert Xue      deprecated="not deprecated">
4281*dc5640d1SHerbert Xue    </method>
4282*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4283*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4284*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4285*dc5640d1SHerbert Xue      deprecated="not deprecated">
4286*dc5640d1SHerbert Xue    </method>
4287*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4288*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4289*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4290*dc5640d1SHerbert Xue      deprecated="not deprecated">
4291*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4292*dc5640d1SHerbert Xue    </method>
4293*dc5640d1SHerbert Xue    <doc>
4294*dc5640d1SHerbert Xue    <![CDATA[Node for types that have {@link com.google.inject.spi.Dependency}s and are
4295*dc5640d1SHerbert Xue bound to {@link InterfaceNode}s. These nodes will often have fields for
4296*dc5640d1SHerbert Xue {@link Member}s that are {@link com.google.inject.spi.InjectionPoint}s.
4297*dc5640d1SHerbert Xue
4298*dc5640d1SHerbert Xue @see DependencyEdge
4299*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4300*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4301*dc5640d1SHerbert Xue    </doc>
4302*dc5640d1SHerbert Xue  </class>
4303*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.ImplementationNode -->
4304*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.InjectorGrapher -->
4305*dc5640d1SHerbert Xue  <interface name="InjectorGrapher"    abstract="true"
4306*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4307*dc5640d1SHerbert Xue    deprecated="not deprecated">
4308*dc5640d1SHerbert Xue    <method name="graph"
4309*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4310*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4311*dc5640d1SHerbert Xue      deprecated="not deprecated">
4312*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4313*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4314*dc5640d1SHerbert Xue      <doc>
4315*dc5640d1SHerbert Xue      <![CDATA[Graphs the guice dependency graph for the given injector using default starting keys.]]>
4316*dc5640d1SHerbert Xue      </doc>
4317*dc5640d1SHerbert Xue    </method>
4318*dc5640d1SHerbert Xue    <method name="graph"
4319*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4320*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4321*dc5640d1SHerbert Xue      deprecated="not deprecated">
4322*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4323*dc5640d1SHerbert Xue      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
4324*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4325*dc5640d1SHerbert Xue      <doc>
4326*dc5640d1SHerbert Xue      <![CDATA[Graphs the guice dependency graph for the given injector using the given starting keys and
4327*dc5640d1SHerbert Xue their transitive dependencies.]]>
4328*dc5640d1SHerbert Xue      </doc>
4329*dc5640d1SHerbert Xue    </method>
4330*dc5640d1SHerbert Xue    <doc>
4331*dc5640d1SHerbert Xue    <![CDATA[Guice injector grapher. Renders the guice dependency graph for an injector. It can render the
4332*dc5640d1SHerbert Xue whole dependency graph or just transitive dependencies of a given set of nodes.
4333*dc5640d1SHerbert Xue
4334*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4335*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as a concrete class with a different API)]]>
4336*dc5640d1SHerbert Xue    </doc>
4337*dc5640d1SHerbert Xue  </interface>
4338*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.InjectorGrapher -->
4339*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.InstanceNode -->
4340*dc5640d1SHerbert Xue  <class name="InstanceNode" extends="com.google.inject.grapher.Node"
4341*dc5640d1SHerbert Xue    abstract="false"
4342*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4343*dc5640d1SHerbert Xue    deprecated="not deprecated">
4344*dc5640d1SHerbert Xue    <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*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4346*dc5640d1SHerbert Xue      deprecated="not deprecated">
4347*dc5640d1SHerbert Xue    </constructor>
4348*dc5640d1SHerbert Xue    <method name="getInstance" return="java.lang.Object"
4349*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4350*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4351*dc5640d1SHerbert Xue      deprecated="not deprecated">
4352*dc5640d1SHerbert Xue    </method>
4353*dc5640d1SHerbert Xue    <method name="getMembers" return="java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4354*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4355*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4356*dc5640d1SHerbert Xue      deprecated="not deprecated">
4357*dc5640d1SHerbert Xue    </method>
4358*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4359*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4360*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4361*dc5640d1SHerbert Xue      deprecated="not deprecated">
4362*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4363*dc5640d1SHerbert Xue    </method>
4364*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4365*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4366*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4367*dc5640d1SHerbert Xue      deprecated="not deprecated">
4368*dc5640d1SHerbert Xue    </method>
4369*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4370*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4371*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4372*dc5640d1SHerbert Xue      deprecated="not deprecated">
4373*dc5640d1SHerbert Xue    </method>
4374*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4375*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4376*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4377*dc5640d1SHerbert Xue      deprecated="not deprecated">
4378*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4379*dc5640d1SHerbert Xue    </method>
4380*dc5640d1SHerbert Xue    <doc>
4381*dc5640d1SHerbert Xue    <![CDATA[Node for instances. Used when a type is bound to an instance.
4382*dc5640d1SHerbert Xue
4383*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4384*dc5640d1SHerbert Xue @since 4.0]]>
4385*dc5640d1SHerbert Xue    </doc>
4386*dc5640d1SHerbert Xue  </class>
4387*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.InstanceNode -->
4388*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.InterfaceNode -->
4389*dc5640d1SHerbert Xue  <class name="InterfaceNode" extends="com.google.inject.grapher.Node"
4390*dc5640d1SHerbert Xue    abstract="false"
4391*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4392*dc5640d1SHerbert Xue    deprecated="not deprecated">
4393*dc5640d1SHerbert Xue    <constructor name="InterfaceNode" type="com.google.inject.grapher.NodeId, java.lang.Object"
4394*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4395*dc5640d1SHerbert Xue      deprecated="not deprecated">
4396*dc5640d1SHerbert Xue    </constructor>
4397*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4398*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4399*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4400*dc5640d1SHerbert Xue      deprecated="not deprecated">
4401*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4402*dc5640d1SHerbert Xue    </method>
4403*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4404*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4405*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4406*dc5640d1SHerbert Xue      deprecated="not deprecated">
4407*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4408*dc5640d1SHerbert Xue    </method>
4409*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4410*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4411*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4412*dc5640d1SHerbert Xue      deprecated="not deprecated">
4413*dc5640d1SHerbert Xue    </method>
4414*dc5640d1SHerbert Xue    <doc>
4415*dc5640d1SHerbert Xue    <![CDATA[Node for an interface type that has been bound to an implementation class or instance.
4416*dc5640d1SHerbert Xue
4417*dc5640d1SHerbert Xue @see BindingEdge
4418*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4419*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4420*dc5640d1SHerbert Xue    </doc>
4421*dc5640d1SHerbert Xue  </class>
4422*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.InterfaceNode -->
4423*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NameFactory -->
4424*dc5640d1SHerbert Xue  <interface name="NameFactory"    abstract="true"
4425*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4426*dc5640d1SHerbert Xue    deprecated="not deprecated">
4427*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4428*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4429*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4430*dc5640d1SHerbert Xue      deprecated="not deprecated">
4431*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4432*dc5640d1SHerbert Xue    </method>
4433*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4434*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4435*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4436*dc5640d1SHerbert Xue      deprecated="not deprecated">
4437*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4438*dc5640d1SHerbert Xue    </method>
4439*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4440*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4441*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4442*dc5640d1SHerbert Xue      deprecated="not deprecated">
4443*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4444*dc5640d1SHerbert Xue    </method>
4445*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4446*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4447*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4448*dc5640d1SHerbert Xue      deprecated="not deprecated">
4449*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4450*dc5640d1SHerbert Xue    </method>
4451*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4452*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4453*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4454*dc5640d1SHerbert Xue      deprecated="not deprecated">
4455*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4456*dc5640d1SHerbert Xue    </method>
4457*dc5640d1SHerbert Xue    <doc>
4458*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4459*dc5640d1SHerbert Xue display in the graph for the types that come up in
4460*dc5640d1SHerbert Xue {@link com.google.inject.Binding}s.
4461*dc5640d1SHerbert Xue
4462*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4463*dc5640d1SHerbert Xue    </doc>
4464*dc5640d1SHerbert Xue  </interface>
4465*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NameFactory -->
4466*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Node -->
4467*dc5640d1SHerbert Xue  <class name="Node" extends="java.lang.Object"
4468*dc5640d1SHerbert Xue    abstract="true"
4469*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4470*dc5640d1SHerbert Xue    deprecated="not deprecated">
4471*dc5640d1SHerbert Xue    <constructor name="Node" type="com.google.inject.grapher.NodeId, java.lang.Object"
4472*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4473*dc5640d1SHerbert Xue      deprecated="not deprecated">
4474*dc5640d1SHerbert Xue    </constructor>
4475*dc5640d1SHerbert Xue    <method name="getId" return="com.google.inject.grapher.NodeId"
4476*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4477*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4478*dc5640d1SHerbert Xue      deprecated="not deprecated">
4479*dc5640d1SHerbert Xue    </method>
4480*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
4481*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4482*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4483*dc5640d1SHerbert Xue      deprecated="not deprecated">
4484*dc5640d1SHerbert Xue    </method>
4485*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4486*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4487*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4488*dc5640d1SHerbert Xue      deprecated="not deprecated">
4489*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4490*dc5640d1SHerbert Xue    </method>
4491*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4492*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4493*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4494*dc5640d1SHerbert Xue      deprecated="not deprecated">
4495*dc5640d1SHerbert Xue    </method>
4496*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4497*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4498*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4499*dc5640d1SHerbert Xue      deprecated="not deprecated">
4500*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4501*dc5640d1SHerbert Xue      <doc>
4502*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of the node with a new ID.
4503*dc5640d1SHerbert Xue
4504*dc5640d1SHerbert Xue @param id new ID of the node
4505*dc5640d1SHerbert Xue @return copy of the node with a new ID]]>
4506*dc5640d1SHerbert Xue      </doc>
4507*dc5640d1SHerbert Xue    </method>
4508*dc5640d1SHerbert Xue    <doc>
4509*dc5640d1SHerbert Xue    <![CDATA[Node in a guice dependency graph.
4510*dc5640d1SHerbert Xue
4511*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4512*dc5640d1SHerbert Xue @since 4.0]]>
4513*dc5640d1SHerbert Xue    </doc>
4514*dc5640d1SHerbert Xue  </class>
4515*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Node -->
4516*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NodeCreator -->
4517*dc5640d1SHerbert Xue  <interface name="NodeCreator"    abstract="true"
4518*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4519*dc5640d1SHerbert Xue    deprecated="not deprecated">
4520*dc5640d1SHerbert Xue    <method name="getNodes" return="java.lang.Iterable&lt;com.google.inject.grapher.Node&gt;"
4521*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4522*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4523*dc5640d1SHerbert Xue      deprecated="not deprecated">
4524*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4525*dc5640d1SHerbert Xue      <doc>
4526*dc5640d1SHerbert Xue      <![CDATA[Returns nodes for the given dependency graph.]]>
4527*dc5640d1SHerbert Xue      </doc>
4528*dc5640d1SHerbert Xue    </method>
4529*dc5640d1SHerbert Xue    <doc>
4530*dc5640d1SHerbert Xue    <![CDATA[Creator of graph nodes.
4531*dc5640d1SHerbert Xue
4532*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4533*dc5640d1SHerbert Xue @since 4.0]]>
4534*dc5640d1SHerbert Xue    </doc>
4535*dc5640d1SHerbert Xue  </interface>
4536*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NodeCreator -->
4537*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.NodeId -->
4538*dc5640d1SHerbert Xue  <class name="NodeId" extends="java.lang.Object"
4539*dc5640d1SHerbert Xue    abstract="false"
4540*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4541*dc5640d1SHerbert Xue    deprecated="not deprecated">
4542*dc5640d1SHerbert Xue    <method name="newTypeId" return="com.google.inject.grapher.NodeId"
4543*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4544*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4545*dc5640d1SHerbert Xue      deprecated="not deprecated">
4546*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4547*dc5640d1SHerbert Xue    </method>
4548*dc5640d1SHerbert Xue    <method name="newInstanceId" return="com.google.inject.grapher.NodeId"
4549*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4550*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4551*dc5640d1SHerbert Xue      deprecated="not deprecated">
4552*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4553*dc5640d1SHerbert Xue    </method>
4554*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;?&gt;"
4555*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4556*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4557*dc5640d1SHerbert Xue      deprecated="not deprecated">
4558*dc5640d1SHerbert Xue    </method>
4559*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4560*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4561*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4562*dc5640d1SHerbert Xue      deprecated="not deprecated">
4563*dc5640d1SHerbert Xue    </method>
4564*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4565*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4566*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4567*dc5640d1SHerbert Xue      deprecated="not deprecated">
4568*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4569*dc5640d1SHerbert Xue    </method>
4570*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4571*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4572*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4573*dc5640d1SHerbert Xue      deprecated="not deprecated">
4574*dc5640d1SHerbert Xue    </method>
4575*dc5640d1SHerbert Xue    <doc>
4576*dc5640d1SHerbert Xue    <![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*dc5640d1SHerbert Xue distinguish instances and implementation classes for the same key. For example
4578*dc5640d1SHerbert Xue {@code bind(Integer.class).toInstance(42)} produces two nodes: an
4579*dc5640d1SHerbert Xue interface node with the key of {@code Key<Integer>} and an instance node with the same
4580*dc5640d1SHerbert Xue {@link Key} and value of 42.
4581*dc5640d1SHerbert Xue
4582*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4583*dc5640d1SHerbert Xue @since 4.0]]>
4584*dc5640d1SHerbert Xue    </doc>
4585*dc5640d1SHerbert Xue  </class>
4586*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.NodeId -->
4587*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.NodeId.NodeType -->
4588*dc5640d1SHerbert Xue  <class name="NodeId.NodeType" extends="java.lang.Enum&lt;com.google.inject.grapher.NodeId.NodeType&gt;"
4589*dc5640d1SHerbert Xue    abstract="false"
4590*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
4591*dc5640d1SHerbert Xue    deprecated="not deprecated">
4592*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.NodeId.NodeType[]"
4593*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4594*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4595*dc5640d1SHerbert Xue      deprecated="not deprecated">
4596*dc5640d1SHerbert Xue    </method>
4597*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.NodeId.NodeType"
4598*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4599*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4600*dc5640d1SHerbert Xue      deprecated="not deprecated">
4601*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4602*dc5640d1SHerbert Xue    </method>
4603*dc5640d1SHerbert Xue    <doc>
4604*dc5640d1SHerbert Xue    <![CDATA[Type of node.
4605*dc5640d1SHerbert Xue
4606*dc5640d1SHerbert Xue @since 4.0]]>
4607*dc5640d1SHerbert Xue    </doc>
4608*dc5640d1SHerbert Xue  </class>
4609*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.NodeId.NodeType -->
4610*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.RootKeySetCreator -->
4611*dc5640d1SHerbert Xue  <interface name="RootKeySetCreator"    abstract="true"
4612*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4613*dc5640d1SHerbert Xue    deprecated="not deprecated">
4614*dc5640d1SHerbert Xue    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4615*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4616*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4617*dc5640d1SHerbert Xue      deprecated="not deprecated">
4618*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4619*dc5640d1SHerbert Xue      <doc>
4620*dc5640d1SHerbert Xue      <![CDATA[Returns the set of starting keys to graph.]]>
4621*dc5640d1SHerbert Xue      </doc>
4622*dc5640d1SHerbert Xue    </method>
4623*dc5640d1SHerbert Xue    <doc>
4624*dc5640d1SHerbert Xue    <![CDATA[Creator of the default starting set of keys to graph. These keys and their transitive
4625*dc5640d1SHerbert Xue dependencies will be graphed.
4626*dc5640d1SHerbert Xue
4627*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4628*dc5640d1SHerbert Xue @since 4.0]]>
4629*dc5640d1SHerbert Xue    </doc>
4630*dc5640d1SHerbert Xue  </interface>
4631*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.RootKeySetCreator -->
4632*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4633*dc5640d1SHerbert Xue  <class name="ShortNameFactory" extends="java.lang.Object"
4634*dc5640d1SHerbert Xue    abstract="false"
4635*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4636*dc5640d1SHerbert Xue    deprecated="not deprecated">
4637*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.NameFactory"/>
4638*dc5640d1SHerbert Xue    <constructor name="ShortNameFactory"
4639*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4640*dc5640d1SHerbert Xue      deprecated="not deprecated">
4641*dc5640d1SHerbert Xue    </constructor>
4642*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4643*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4644*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4645*dc5640d1SHerbert Xue      deprecated="not deprecated">
4646*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4647*dc5640d1SHerbert Xue    </method>
4648*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4649*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4650*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4651*dc5640d1SHerbert Xue      deprecated="not deprecated">
4652*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4653*dc5640d1SHerbert Xue    </method>
4654*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4655*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4656*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4657*dc5640d1SHerbert Xue      deprecated="not deprecated">
4658*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4659*dc5640d1SHerbert Xue    </method>
4660*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4661*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4662*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4663*dc5640d1SHerbert Xue      deprecated="not deprecated">
4664*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4665*dc5640d1SHerbert Xue    </method>
4666*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4667*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4668*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4669*dc5640d1SHerbert Xue      deprecated="not deprecated">
4670*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4671*dc5640d1SHerbert Xue      <doc>
4672*dc5640d1SHerbert Xue      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4673*dc5640d1SHerbert Xue a {@link StackTraceElement} for when the binding is made to the instance,
4674*dc5640d1SHerbert Xue or a {@link Method} when a provider method is used.]]>
4675*dc5640d1SHerbert Xue      </doc>
4676*dc5640d1SHerbert Xue    </method>
4677*dc5640d1SHerbert Xue    <method name="getFileString" return="java.lang.String"
4678*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4679*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4680*dc5640d1SHerbert Xue      deprecated="not deprecated">
4681*dc5640d1SHerbert Xue      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4682*dc5640d1SHerbert Xue    </method>
4683*dc5640d1SHerbert Xue    <method name="getMethodString" return="java.lang.String"
4684*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4685*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4686*dc5640d1SHerbert Xue      deprecated="not deprecated">
4687*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
4688*dc5640d1SHerbert Xue    </method>
4689*dc5640d1SHerbert Xue    <doc>
4690*dc5640d1SHerbert Xue    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4691*dc5640d1SHerbert Xue {@link Object#toString()}s and strips package names out of them so that
4692*dc5640d1SHerbert Xue they'll fit on the graph.
4693*dc5640d1SHerbert Xue
4694*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4695*dc5640d1SHerbert Xue    </doc>
4696*dc5640d1SHerbert Xue  </class>
4697*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4698*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4699*dc5640d1SHerbert Xue  <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*dc5640d1SHerbert Xue    abstract="false"
4701*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4702*dc5640d1SHerbert Xue    deprecated="not deprecated">
4703*dc5640d1SHerbert Xue    <constructor name="TransitiveDependencyVisitor"
4704*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4705*dc5640d1SHerbert Xue      deprecated="not deprecated">
4706*dc5640d1SHerbert Xue    </constructor>
4707*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4709*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4710*dc5640d1SHerbert Xue      deprecated="not deprecated">
4711*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4712*dc5640d1SHerbert Xue    </method>
4713*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4714*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4715*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4716*dc5640d1SHerbert Xue      deprecated="not deprecated">
4717*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4718*dc5640d1SHerbert Xue    </method>
4719*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4720*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4721*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4722*dc5640d1SHerbert Xue      deprecated="not deprecated">
4723*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4724*dc5640d1SHerbert Xue    </method>
4725*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4726*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4727*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4728*dc5640d1SHerbert Xue      deprecated="not deprecated">
4729*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4730*dc5640d1SHerbert Xue    </method>
4731*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4732*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4733*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4734*dc5640d1SHerbert Xue      deprecated="not deprecated">
4735*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4736*dc5640d1SHerbert Xue    </method>
4737*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4738*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4739*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4740*dc5640d1SHerbert Xue      deprecated="not deprecated">
4741*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4742*dc5640d1SHerbert Xue    </method>
4743*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4744*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4745*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4746*dc5640d1SHerbert Xue      deprecated="not deprecated">
4747*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4748*dc5640d1SHerbert Xue    </method>
4749*dc5640d1SHerbert Xue    <method name="visitOther" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4750*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4751*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4752*dc5640d1SHerbert Xue      deprecated="not deprecated">
4753*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
4754*dc5640d1SHerbert Xue      <doc>
4755*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4756*dc5640d1SHerbert Xue      </doc>
4757*dc5640d1SHerbert Xue    </method>
4758*dc5640d1SHerbert Xue    <doc>
4759*dc5640d1SHerbert Xue    <![CDATA[{@link com.google.inject.spi.BindingTargetVisitor} that returns a
4760*dc5640d1SHerbert Xue {@link Collection} of the {@link Key}s of each {@link Binding}'s
4761*dc5640d1SHerbert Xue dependencies. Used by {@link InjectorGrapher} to walk the dependency graph
4762*dc5640d1SHerbert Xue from a starting set of {@link Binding}s.
4763*dc5640d1SHerbert Xue
4764*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4765*dc5640d1SHerbert Xue    </doc>
4766*dc5640d1SHerbert Xue  </class>
4767*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4768*dc5640d1SHerbert Xue</package>
4769*dc5640d1SHerbert Xue<package name="com.google.inject.grapher.graphviz">
4770*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4771*dc5640d1SHerbert Xue  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4772*dc5640d1SHerbert Xue    abstract="false"
4773*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4774*dc5640d1SHerbert Xue    deprecated="not deprecated">
4775*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4776*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4777*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4778*dc5640d1SHerbert Xue      deprecated="not deprecated">
4779*dc5640d1SHerbert Xue    </method>
4780*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4781*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4782*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4783*dc5640d1SHerbert Xue      deprecated="not deprecated">
4784*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4785*dc5640d1SHerbert Xue    </method>
4786*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4787*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4788*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4789*dc5640d1SHerbert Xue      deprecated="not deprecated">
4790*dc5640d1SHerbert Xue    </method>
4791*dc5640d1SHerbert Xue    <doc>
4792*dc5640d1SHerbert Xue    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4793*dc5640d1SHerbert Xue concatenation to make double arrows and such.
4794*dc5640d1SHerbert Xue <p>
4795*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/arrows.html
4796*dc5640d1SHerbert Xue
4797*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4798*dc5640d1SHerbert Xue    </doc>
4799*dc5640d1SHerbert Xue  </class>
4800*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4801*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4802*dc5640d1SHerbert Xue  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4803*dc5640d1SHerbert Xue    abstract="false"
4804*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4805*dc5640d1SHerbert Xue    deprecated="not deprecated">
4806*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4807*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4808*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4809*dc5640d1SHerbert Xue      deprecated="not deprecated">
4810*dc5640d1SHerbert Xue    </method>
4811*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4812*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4813*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4814*dc5640d1SHerbert Xue      deprecated="not deprecated">
4815*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4816*dc5640d1SHerbert Xue    </method>
4817*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4818*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4819*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4820*dc5640d1SHerbert Xue      deprecated="not deprecated">
4821*dc5640d1SHerbert Xue    </method>
4822*dc5640d1SHerbert Xue    <doc>
4823*dc5640d1SHerbert Xue    <![CDATA[Enum for the "compass point" values used to control where edge
4824*dc5640d1SHerbert Xue end points appear on the graph.
4825*dc5640d1SHerbert Xue <p>
4826*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4827*dc5640d1SHerbert Xue
4828*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4829*dc5640d1SHerbert Xue    </doc>
4830*dc5640d1SHerbert Xue  </class>
4831*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4832*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4833*dc5640d1SHerbert Xue  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4834*dc5640d1SHerbert Xue    abstract="false"
4835*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4836*dc5640d1SHerbert Xue    deprecated="not deprecated">
4837*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4838*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4839*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4840*dc5640d1SHerbert Xue      deprecated="not deprecated">
4841*dc5640d1SHerbert Xue    </method>
4842*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4843*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4844*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4845*dc5640d1SHerbert Xue      deprecated="not deprecated">
4846*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4847*dc5640d1SHerbert Xue    </method>
4848*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4849*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4850*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4851*dc5640d1SHerbert Xue      deprecated="not deprecated">
4852*dc5640d1SHerbert Xue    </method>
4853*dc5640d1SHerbert Xue    <doc>
4854*dc5640d1SHerbert Xue    <![CDATA[Styles for edges.
4855*dc5640d1SHerbert Xue <p>
4856*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
4857*dc5640d1SHerbert Xue
4858*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4859*dc5640d1SHerbert Xue    </doc>
4860*dc5640d1SHerbert Xue  </class>
4861*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4862*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4863*dc5640d1SHerbert Xue  <class name="GraphvizEdge" extends="java.lang.Object"
4864*dc5640d1SHerbert Xue    abstract="false"
4865*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4866*dc5640d1SHerbert Xue    deprecated="not deprecated">
4867*dc5640d1SHerbert Xue    <constructor name="GraphvizEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4868*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4869*dc5640d1SHerbert Xue      deprecated="not deprecated">
4870*dc5640d1SHerbert Xue    </constructor>
4871*dc5640d1SHerbert Xue    <method name="getHeadNodeId" return="com.google.inject.grapher.NodeId"
4872*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4873*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4874*dc5640d1SHerbert Xue      deprecated="not deprecated">
4875*dc5640d1SHerbert Xue      <doc>
4876*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4877*dc5640d1SHerbert Xue      </doc>
4878*dc5640d1SHerbert Xue    </method>
4879*dc5640d1SHerbert Xue    <method name="getHeadPortId" return="java.lang.String"
4880*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4881*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4882*dc5640d1SHerbert Xue      deprecated="not deprecated">
4883*dc5640d1SHerbert Xue    </method>
4884*dc5640d1SHerbert Xue    <method name="setHeadPortId"
4885*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4887*dc5640d1SHerbert Xue      deprecated="not deprecated">
4888*dc5640d1SHerbert Xue      <param name="headPortId" type="java.lang.String"/>
4889*dc5640d1SHerbert Xue    </method>
4890*dc5640d1SHerbert Xue    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4891*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4892*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4893*dc5640d1SHerbert Xue      deprecated="not deprecated">
4894*dc5640d1SHerbert Xue    </method>
4895*dc5640d1SHerbert Xue    <method name="setHeadCompassPoint"
4896*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4897*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4898*dc5640d1SHerbert Xue      deprecated="not deprecated">
4899*dc5640d1SHerbert Xue      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4900*dc5640d1SHerbert Xue    </method>
4901*dc5640d1SHerbert Xue    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4902*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4903*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4904*dc5640d1SHerbert Xue      deprecated="not deprecated">
4905*dc5640d1SHerbert Xue    </method>
4906*dc5640d1SHerbert Xue    <method name="setArrowHead"
4907*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4908*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4909*dc5640d1SHerbert Xue      deprecated="not deprecated">
4910*dc5640d1SHerbert Xue      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4911*dc5640d1SHerbert Xue    </method>
4912*dc5640d1SHerbert Xue    <method name="getTailNodeId" return="com.google.inject.grapher.NodeId"
4913*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4914*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4915*dc5640d1SHerbert Xue      deprecated="not deprecated">
4916*dc5640d1SHerbert Xue      <doc>
4917*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4918*dc5640d1SHerbert Xue      </doc>
4919*dc5640d1SHerbert Xue    </method>
4920*dc5640d1SHerbert Xue    <method name="getTailPortId" return="java.lang.String"
4921*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4922*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4923*dc5640d1SHerbert Xue      deprecated="not deprecated">
4924*dc5640d1SHerbert Xue    </method>
4925*dc5640d1SHerbert Xue    <method name="setTailPortId"
4926*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4927*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4928*dc5640d1SHerbert Xue      deprecated="not deprecated">
4929*dc5640d1SHerbert Xue      <param name="tailPortId" type="java.lang.String"/>
4930*dc5640d1SHerbert Xue    </method>
4931*dc5640d1SHerbert Xue    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4932*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4933*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4934*dc5640d1SHerbert Xue      deprecated="not deprecated">
4935*dc5640d1SHerbert Xue    </method>
4936*dc5640d1SHerbert Xue    <method name="setTailCompassPoint"
4937*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4938*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4939*dc5640d1SHerbert Xue      deprecated="not deprecated">
4940*dc5640d1SHerbert Xue      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4941*dc5640d1SHerbert Xue    </method>
4942*dc5640d1SHerbert Xue    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4943*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4944*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4945*dc5640d1SHerbert Xue      deprecated="not deprecated">
4946*dc5640d1SHerbert Xue    </method>
4947*dc5640d1SHerbert Xue    <method name="setArrowTail"
4948*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4949*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4950*dc5640d1SHerbert Xue      deprecated="not deprecated">
4951*dc5640d1SHerbert Xue      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4952*dc5640d1SHerbert Xue    </method>
4953*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4954*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4955*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4956*dc5640d1SHerbert Xue      deprecated="not deprecated">
4957*dc5640d1SHerbert Xue    </method>
4958*dc5640d1SHerbert Xue    <method name="setStyle"
4959*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4960*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4961*dc5640d1SHerbert Xue      deprecated="not deprecated">
4962*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4963*dc5640d1SHerbert Xue    </method>
4964*dc5640d1SHerbert Xue    <doc>
4965*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4966*dc5640d1SHerbert Xue interested in drawing.
4967*dc5640d1SHerbert Xue
4968*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4969*dc5640d1SHerbert Xue    </doc>
4970*dc5640d1SHerbert Xue  </class>
4971*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4972*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4973*dc5640d1SHerbert Xue  <class name="GraphvizGrapher" extends="com.google.inject.grapher.AbstractInjectorGrapher"
4974*dc5640d1SHerbert Xue    abstract="false"
4975*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4976*dc5640d1SHerbert Xue    deprecated="not deprecated">
4977*dc5640d1SHerbert Xue    <method name="reset"
4978*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4979*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4980*dc5640d1SHerbert Xue      deprecated="not deprecated">
4981*dc5640d1SHerbert Xue    </method>
4982*dc5640d1SHerbert Xue    <method name="setOut"
4983*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4984*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4985*dc5640d1SHerbert Xue      deprecated="not deprecated">
4986*dc5640d1SHerbert Xue      <param name="out" type="java.io.PrintWriter"/>
4987*dc5640d1SHerbert Xue    </method>
4988*dc5640d1SHerbert Xue    <method name="setRankdir"
4989*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4990*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4991*dc5640d1SHerbert Xue      deprecated="not deprecated">
4992*dc5640d1SHerbert Xue      <param name="rankdir" type="java.lang.String"/>
4993*dc5640d1SHerbert Xue    </method>
4994*dc5640d1SHerbert Xue    <method name="postProcess"
4995*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4996*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4997*dc5640d1SHerbert Xue      deprecated="not deprecated">
4998*dc5640d1SHerbert Xue    </method>
4999*dc5640d1SHerbert Xue    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5000*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5001*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5002*dc5640d1SHerbert Xue      deprecated="not deprecated">
5003*dc5640d1SHerbert Xue    </method>
5004*dc5640d1SHerbert Xue    <method name="start"
5005*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5006*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5007*dc5640d1SHerbert Xue      deprecated="not deprecated">
5008*dc5640d1SHerbert Xue    </method>
5009*dc5640d1SHerbert Xue    <method name="finish"
5010*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5011*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5012*dc5640d1SHerbert Xue      deprecated="not deprecated">
5013*dc5640d1SHerbert Xue    </method>
5014*dc5640d1SHerbert Xue    <method name="renderNode"
5015*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5016*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5017*dc5640d1SHerbert Xue      deprecated="not deprecated">
5018*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5019*dc5640d1SHerbert Xue    </method>
5020*dc5640d1SHerbert Xue    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5021*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5022*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5023*dc5640d1SHerbert Xue      deprecated="not deprecated">
5024*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5025*dc5640d1SHerbert Xue    </method>
5026*dc5640d1SHerbert Xue    <method name="getNodeLabel" return="java.lang.String"
5027*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5028*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5029*dc5640d1SHerbert Xue      deprecated="not deprecated">
5030*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5031*dc5640d1SHerbert Xue      <doc>
5032*dc5640d1SHerbert Xue      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5033*dc5640d1SHerbert Xue table with a heading at the top and (in the case of
5034*dc5640d1SHerbert Xue {@link ImplementationNode}s) rows for each of the member fields.]]>
5035*dc5640d1SHerbert Xue      </doc>
5036*dc5640d1SHerbert Xue    </method>
5037*dc5640d1SHerbert Xue    <method name="renderEdge"
5038*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5039*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5040*dc5640d1SHerbert Xue      deprecated="not deprecated">
5041*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5042*dc5640d1SHerbert Xue    </method>
5043*dc5640d1SHerbert Xue    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5044*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5045*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5046*dc5640d1SHerbert Xue      deprecated="not deprecated">
5047*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5048*dc5640d1SHerbert Xue    </method>
5049*dc5640d1SHerbert Xue    <method name="getArrowString" return="java.lang.String"
5050*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5051*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5052*dc5640d1SHerbert Xue      deprecated="not deprecated">
5053*dc5640d1SHerbert Xue      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5054*dc5640d1SHerbert Xue      <doc>
5055*dc5640d1SHerbert Xue      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5056*dc5640d1SHerbert Xue represents combining them. With Graphviz, that just means concatenating
5057*dc5640d1SHerbert Xue them.]]>
5058*dc5640d1SHerbert Xue      </doc>
5059*dc5640d1SHerbert Xue    </method>
5060*dc5640d1SHerbert Xue    <method name="getEdgeEndPoint" return="java.lang.String"
5061*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5062*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5063*dc5640d1SHerbert Xue      deprecated="not deprecated">
5064*dc5640d1SHerbert Xue      <param name="nodeId" type="java.lang.String"/>
5065*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
5066*dc5640d1SHerbert Xue      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5067*dc5640d1SHerbert Xue    </method>
5068*dc5640d1SHerbert Xue    <method name="htmlEscape" return="java.lang.String"
5069*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5070*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5071*dc5640d1SHerbert Xue      deprecated="not deprecated">
5072*dc5640d1SHerbert Xue      <param name="str" type="java.lang.String"/>
5073*dc5640d1SHerbert Xue    </method>
5074*dc5640d1SHerbert Xue    <method name="htmlEscape" return="java.util.List&lt;java.lang.String&gt;"
5075*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5076*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5077*dc5640d1SHerbert Xue      deprecated="not deprecated">
5078*dc5640d1SHerbert Xue      <param name="elements" type="java.util.List&lt;java.lang.String&gt;"/>
5079*dc5640d1SHerbert Xue    </method>
5080*dc5640d1SHerbert Xue    <method name="newInterfaceNode"
5081*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5082*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5083*dc5640d1SHerbert Xue      deprecated="not deprecated">
5084*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
5085*dc5640d1SHerbert Xue    </method>
5086*dc5640d1SHerbert Xue    <method name="newImplementationNode"
5087*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5088*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5089*dc5640d1SHerbert Xue      deprecated="not deprecated">
5090*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
5091*dc5640d1SHerbert Xue    </method>
5092*dc5640d1SHerbert Xue    <method name="newInstanceNode"
5093*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5094*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5095*dc5640d1SHerbert Xue      deprecated="not deprecated">
5096*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
5097*dc5640d1SHerbert Xue    </method>
5098*dc5640d1SHerbert Xue    <method name="newDependencyEdge"
5099*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5100*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5101*dc5640d1SHerbert Xue      deprecated="not deprecated">
5102*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
5103*dc5640d1SHerbert Xue    </method>
5104*dc5640d1SHerbert Xue    <method name="newBindingEdge"
5105*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5106*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5107*dc5640d1SHerbert Xue      deprecated="not deprecated">
5108*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
5109*dc5640d1SHerbert Xue    </method>
5110*dc5640d1SHerbert Xue    <doc>
5111*dc5640d1SHerbert Xue    <![CDATA[{@link com.google.inject.grapher.InjectorGrapher} implementation that writes out a Graphviz DOT
5112*dc5640d1SHerbert Xue file of the graph. Dependencies are bound in {@link GraphvizModule}.
5113*dc5640d1SHerbert Xue <p>
5114*dc5640d1SHerbert Xue Specify the {@link PrintWriter} to output to with {@link #setOut(PrintWriter)}.
5115*dc5640d1SHerbert Xue
5116*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
5117*dc5640d1SHerbert Xue @since 4.0]]>
5118*dc5640d1SHerbert Xue    </doc>
5119*dc5640d1SHerbert Xue  </class>
5120*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizGrapher -->
5121*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
5122*dc5640d1SHerbert Xue  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
5123*dc5640d1SHerbert Xue    abstract="false"
5124*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5125*dc5640d1SHerbert Xue    deprecated="not deprecated">
5126*dc5640d1SHerbert Xue    <constructor name="GraphvizModule"
5127*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5128*dc5640d1SHerbert Xue      deprecated="not deprecated">
5129*dc5640d1SHerbert Xue    </constructor>
5130*dc5640d1SHerbert Xue    <method name="configure"
5131*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5132*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5133*dc5640d1SHerbert Xue      deprecated="not deprecated">
5134*dc5640d1SHerbert Xue    </method>
5135*dc5640d1SHerbert Xue    <doc>
5136*dc5640d1SHerbert Xue    <![CDATA[Module that provides classes needed by {@link GraphvizGrapher}.
5137*dc5640d1SHerbert Xue
5138*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5139*dc5640d1SHerbert Xue    </doc>
5140*dc5640d1SHerbert Xue  </class>
5141*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
5142*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
5143*dc5640d1SHerbert Xue  <class name="GraphvizNode" extends="java.lang.Object"
5144*dc5640d1SHerbert Xue    abstract="false"
5145*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5146*dc5640d1SHerbert Xue    deprecated="not deprecated">
5147*dc5640d1SHerbert Xue    <constructor name="GraphvizNode" type="com.google.inject.grapher.NodeId"
5148*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5149*dc5640d1SHerbert Xue      deprecated="not deprecated">
5150*dc5640d1SHerbert Xue      <doc>
5151*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5152*dc5640d1SHerbert Xue      </doc>
5153*dc5640d1SHerbert Xue    </constructor>
5154*dc5640d1SHerbert Xue    <method name="getNodeId" return="com.google.inject.grapher.NodeId"
5155*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5156*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5157*dc5640d1SHerbert Xue      deprecated="not deprecated">
5158*dc5640d1SHerbert Xue      <doc>
5159*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5160*dc5640d1SHerbert Xue      </doc>
5161*dc5640d1SHerbert Xue    </method>
5162*dc5640d1SHerbert Xue    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
5163*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5164*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5165*dc5640d1SHerbert Xue      deprecated="not deprecated">
5166*dc5640d1SHerbert Xue    </method>
5167*dc5640d1SHerbert Xue    <method name="setShape"
5168*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5169*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5170*dc5640d1SHerbert Xue      deprecated="not deprecated">
5171*dc5640d1SHerbert Xue      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
5172*dc5640d1SHerbert Xue    </method>
5173*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
5174*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5175*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5176*dc5640d1SHerbert Xue      deprecated="not deprecated">
5177*dc5640d1SHerbert Xue    </method>
5178*dc5640d1SHerbert Xue    <method name="setStyle"
5179*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5180*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5181*dc5640d1SHerbert Xue      deprecated="not deprecated">
5182*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
5183*dc5640d1SHerbert Xue    </method>
5184*dc5640d1SHerbert Xue    <method name="getTitle" return="java.lang.String"
5185*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5186*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5187*dc5640d1SHerbert Xue      deprecated="not deprecated">
5188*dc5640d1SHerbert Xue    </method>
5189*dc5640d1SHerbert Xue    <method name="setTitle"
5190*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5191*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5192*dc5640d1SHerbert Xue      deprecated="not deprecated">
5193*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
5194*dc5640d1SHerbert Xue    </method>
5195*dc5640d1SHerbert Xue    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
5196*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5197*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5198*dc5640d1SHerbert Xue      deprecated="not deprecated">
5199*dc5640d1SHerbert Xue    </method>
5200*dc5640d1SHerbert Xue    <method name="addSubtitle"
5201*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5202*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5203*dc5640d1SHerbert Xue      deprecated="not deprecated">
5204*dc5640d1SHerbert Xue      <param name="position" type="int"/>
5205*dc5640d1SHerbert Xue      <param name="subtitle" type="java.lang.String"/>
5206*dc5640d1SHerbert Xue    </method>
5207*dc5640d1SHerbert Xue    <method name="getHeaderTextColor" return="java.lang.String"
5208*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5209*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5210*dc5640d1SHerbert Xue      deprecated="not deprecated">
5211*dc5640d1SHerbert Xue    </method>
5212*dc5640d1SHerbert Xue    <method name="setHeaderTextColor"
5213*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5214*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5215*dc5640d1SHerbert Xue      deprecated="not deprecated">
5216*dc5640d1SHerbert Xue      <param name="headerTextColor" type="java.lang.String"/>
5217*dc5640d1SHerbert Xue    </method>
5218*dc5640d1SHerbert Xue    <method name="getHeaderBackgroundColor" return="java.lang.String"
5219*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5220*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5221*dc5640d1SHerbert Xue      deprecated="not deprecated">
5222*dc5640d1SHerbert Xue    </method>
5223*dc5640d1SHerbert Xue    <method name="setHeaderBackgroundColor"
5224*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5225*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5226*dc5640d1SHerbert Xue      deprecated="not deprecated">
5227*dc5640d1SHerbert Xue      <param name="headerBackgroundColor" type="java.lang.String"/>
5228*dc5640d1SHerbert Xue    </method>
5229*dc5640d1SHerbert Xue    <method name="addField"
5230*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5231*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5232*dc5640d1SHerbert Xue      deprecated="not deprecated">
5233*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
5234*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
5235*dc5640d1SHerbert Xue    </method>
5236*dc5640d1SHerbert Xue    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5237*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5238*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5239*dc5640d1SHerbert Xue      deprecated="not deprecated">
5240*dc5640d1SHerbert Xue    </method>
5241*dc5640d1SHerbert Xue    <method name="getIdentifier" return="java.lang.String"
5242*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5243*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5244*dc5640d1SHerbert Xue      deprecated="not deprecated">
5245*dc5640d1SHerbert Xue      <doc>
5246*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5247*dc5640d1SHerbert Xue      </doc>
5248*dc5640d1SHerbert Xue    </method>
5249*dc5640d1SHerbert Xue    <method name="setIdentifier"
5250*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5251*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5252*dc5640d1SHerbert Xue      deprecated="not deprecated">
5253*dc5640d1SHerbert Xue      <param name="identifier" type="java.lang.String"/>
5254*dc5640d1SHerbert Xue      <doc>
5255*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5256*dc5640d1SHerbert Xue      </doc>
5257*dc5640d1SHerbert Xue    </method>
5258*dc5640d1SHerbert Xue    <doc>
5259*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
5260*dc5640d1SHerbert Xue interested in drawing.
5261*dc5640d1SHerbert Xue
5262*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5263*dc5640d1SHerbert Xue    </doc>
5264*dc5640d1SHerbert Xue  </class>
5265*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
5266*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5267*dc5640d1SHerbert Xue  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5268*dc5640d1SHerbert Xue    abstract="false"
5269*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5270*dc5640d1SHerbert Xue    deprecated="not deprecated">
5271*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5272*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5273*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5274*dc5640d1SHerbert Xue      deprecated="not deprecated">
5275*dc5640d1SHerbert Xue    </method>
5276*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5277*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5278*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5279*dc5640d1SHerbert Xue      deprecated="not deprecated">
5280*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5281*dc5640d1SHerbert Xue    </method>
5282*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5283*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5284*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5285*dc5640d1SHerbert Xue      deprecated="not deprecated">
5286*dc5640d1SHerbert Xue    </method>
5287*dc5640d1SHerbert Xue    <doc>
5288*dc5640d1SHerbert Xue    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5289*dc5640d1SHerbert Xue <p>
5290*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/shapes.html
5291*dc5640d1SHerbert Xue
5292*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5293*dc5640d1SHerbert Xue    </doc>
5294*dc5640d1SHerbert Xue  </class>
5295*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5296*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5297*dc5640d1SHerbert Xue  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5298*dc5640d1SHerbert Xue    abstract="false"
5299*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5300*dc5640d1SHerbert Xue    deprecated="not deprecated">
5301*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5302*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5303*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5304*dc5640d1SHerbert Xue      deprecated="not deprecated">
5305*dc5640d1SHerbert Xue    </method>
5306*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5307*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5308*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5309*dc5640d1SHerbert Xue      deprecated="not deprecated">
5310*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5311*dc5640d1SHerbert Xue    </method>
5312*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5313*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5314*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5315*dc5640d1SHerbert Xue      deprecated="not deprecated">
5316*dc5640d1SHerbert Xue    </method>
5317*dc5640d1SHerbert Xue    <doc>
5318*dc5640d1SHerbert Xue    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5319*dc5640d1SHerbert Xue <p>
5320*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
5321*dc5640d1SHerbert Xue
5322*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5323*dc5640d1SHerbert Xue    </doc>
5324*dc5640d1SHerbert Xue  </class>
5325*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5326*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5327*dc5640d1SHerbert Xue  <interface name="PortIdFactory"    abstract="true"
5328*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5329*dc5640d1SHerbert Xue    deprecated="not deprecated">
5330*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5331*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5332*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5333*dc5640d1SHerbert Xue      deprecated="not deprecated">
5334*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5335*dc5640d1SHerbert Xue    </method>
5336*dc5640d1SHerbert Xue    <doc>
5337*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5338*dc5640d1SHerbert Xue rows in {@link com.google.inject.grapher.ImplementationNode}-displaying {@link GraphvizNode}s.
5339*dc5640d1SHerbert Xue
5340*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5341*dc5640d1SHerbert Xue    </doc>
5342*dc5640d1SHerbert Xue  </interface>
5343*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5344*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5345*dc5640d1SHerbert Xue  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5346*dc5640d1SHerbert Xue    abstract="false"
5347*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5348*dc5640d1SHerbert Xue    deprecated="not deprecated">
5349*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5350*dc5640d1SHerbert Xue    <constructor name="PortIdFactoryImpl"
5351*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5352*dc5640d1SHerbert Xue      deprecated="not deprecated">
5353*dc5640d1SHerbert Xue    </constructor>
5354*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5355*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5356*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5357*dc5640d1SHerbert Xue      deprecated="not deprecated">
5358*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5359*dc5640d1SHerbert Xue    </method>
5360*dc5640d1SHerbert Xue    <doc>
5361*dc5640d1SHerbert Xue    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5362*dc5640d1SHerbert Xue
5363*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5364*dc5640d1SHerbert Xue    </doc>
5365*dc5640d1SHerbert Xue  </class>
5366*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5367*dc5640d1SHerbert Xue</package>
5368*dc5640d1SHerbert Xue<package name="com.google.inject.jndi">
5369*dc5640d1SHerbert Xue  <!-- start class com.google.inject.jndi.JndiIntegration -->
5370*dc5640d1SHerbert Xue  <class name="JndiIntegration" extends="java.lang.Object"
5371*dc5640d1SHerbert Xue    abstract="false"
5372*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5373*dc5640d1SHerbert Xue    deprecated="not deprecated">
5374*dc5640d1SHerbert Xue    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5375*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5376*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5377*dc5640d1SHerbert Xue      deprecated="not deprecated">
5378*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5379*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5380*dc5640d1SHerbert Xue      <doc>
5381*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5382*dc5640d1SHerbert Xue Example usage:
5383*dc5640d1SHerbert Xue
5384*dc5640d1SHerbert Xue <pre>
5385*dc5640d1SHerbert Xue bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5386*dc5640d1SHerbert Xue </pre>]]>
5387*dc5640d1SHerbert Xue      </doc>
5388*dc5640d1SHerbert Xue    </method>
5389*dc5640d1SHerbert Xue    <doc>
5390*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5391*dc5640d1SHerbert Xue {@link javax.naming.Context}.
5392*dc5640d1SHerbert Xue
5393*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5394*dc5640d1SHerbert Xue    </doc>
5395*dc5640d1SHerbert Xue  </class>
5396*dc5640d1SHerbert Xue  <!-- end class com.google.inject.jndi.JndiIntegration -->
5397*dc5640d1SHerbert Xue</package>
5398*dc5640d1SHerbert Xue<package name="com.google.inject.matcher">
5399*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5400*dc5640d1SHerbert Xue  <class name="AbstractMatcher" extends="java.lang.Object"
5401*dc5640d1SHerbert Xue    abstract="true"
5402*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5403*dc5640d1SHerbert Xue    deprecated="not deprecated">
5404*dc5640d1SHerbert Xue    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5405*dc5640d1SHerbert Xue    <constructor name="AbstractMatcher"
5406*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5407*dc5640d1SHerbert Xue      deprecated="not deprecated">
5408*dc5640d1SHerbert Xue    </constructor>
5409*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5410*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5411*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5412*dc5640d1SHerbert Xue      deprecated="not deprecated">
5413*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5414*dc5640d1SHerbert Xue    </method>
5415*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5416*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5417*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5418*dc5640d1SHerbert Xue      deprecated="not deprecated">
5419*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5420*dc5640d1SHerbert Xue    </method>
5421*dc5640d1SHerbert Xue    <doc>
5422*dc5640d1SHerbert Xue    <![CDATA[Implements {@code and()} and {@code or()}.
5423*dc5640d1SHerbert Xue
5424*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5425*dc5640d1SHerbert Xue    </doc>
5426*dc5640d1SHerbert Xue  </class>
5427*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5428*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.matcher.Matcher -->
5429*dc5640d1SHerbert Xue  <interface name="Matcher"    abstract="true"
5430*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5431*dc5640d1SHerbert Xue    deprecated="not deprecated">
5432*dc5640d1SHerbert Xue    <method name="matches" return="boolean"
5433*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5434*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5435*dc5640d1SHerbert Xue      deprecated="not deprecated">
5436*dc5640d1SHerbert Xue      <param name="t" type="T"/>
5437*dc5640d1SHerbert Xue      <doc>
5438*dc5640d1SHerbert Xue      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5439*dc5640d1SHerbert Xue      </doc>
5440*dc5640d1SHerbert Xue    </method>
5441*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5442*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5443*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5444*dc5640d1SHerbert Xue      deprecated="not deprecated">
5445*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5446*dc5640d1SHerbert Xue      <doc>
5447*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5448*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5449*dc5640d1SHerbert Xue      </doc>
5450*dc5640d1SHerbert Xue    </method>
5451*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5452*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5453*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5454*dc5640d1SHerbert Xue      deprecated="not deprecated">
5455*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5456*dc5640d1SHerbert Xue      <doc>
5457*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5458*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5459*dc5640d1SHerbert Xue      </doc>
5460*dc5640d1SHerbert Xue    </method>
5461*dc5640d1SHerbert Xue    <doc>
5462*dc5640d1SHerbert Xue    <![CDATA[Returns {@code true} or {@code false} for a given input.
5463*dc5640d1SHerbert Xue
5464*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5465*dc5640d1SHerbert Xue    </doc>
5466*dc5640d1SHerbert Xue  </interface>
5467*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.matcher.Matcher -->
5468*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.Matchers -->
5469*dc5640d1SHerbert Xue  <class name="Matchers" extends="java.lang.Object"
5470*dc5640d1SHerbert Xue    abstract="false"
5471*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5472*dc5640d1SHerbert Xue    deprecated="not deprecated">
5473*dc5640d1SHerbert Xue    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5474*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5475*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5476*dc5640d1SHerbert Xue      deprecated="not deprecated">
5477*dc5640d1SHerbert Xue      <doc>
5478*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches any input.]]>
5479*dc5640d1SHerbert Xue      </doc>
5480*dc5640d1SHerbert Xue    </method>
5481*dc5640d1SHerbert Xue    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5482*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5483*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5484*dc5640d1SHerbert Xue      deprecated="not deprecated">
5485*dc5640d1SHerbert Xue      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5486*dc5640d1SHerbert Xue      <doc>
5487*dc5640d1SHerbert Xue      <![CDATA[Inverts the given matcher.]]>
5488*dc5640d1SHerbert Xue      </doc>
5489*dc5640d1SHerbert Xue    </method>
5490*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5491*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5492*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5493*dc5640d1SHerbert Xue      deprecated="not deprecated">
5494*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5495*dc5640d1SHerbert Xue      <doc>
5496*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5497*dc5640d1SHerbert Xue with a given annotation.]]>
5498*dc5640d1SHerbert Xue      </doc>
5499*dc5640d1SHerbert Xue    </method>
5500*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5501*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5502*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5503*dc5640d1SHerbert Xue      deprecated="not deprecated">
5504*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5505*dc5640d1SHerbert Xue      <doc>
5506*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5507*dc5640d1SHerbert Xue with a given annotation.]]>
5508*dc5640d1SHerbert Xue      </doc>
5509*dc5640d1SHerbert Xue    </method>
5510*dc5640d1SHerbert Xue    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5511*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5512*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5513*dc5640d1SHerbert Xue      deprecated="not deprecated">
5514*dc5640d1SHerbert Xue      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5515*dc5640d1SHerbert Xue      <doc>
5516*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5517*dc5640d1SHerbert Xue the given type).]]>
5518*dc5640d1SHerbert Xue      </doc>
5519*dc5640d1SHerbert Xue    </method>
5520*dc5640d1SHerbert Xue    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5521*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5522*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5523*dc5640d1SHerbert Xue      deprecated="not deprecated">
5524*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5525*dc5640d1SHerbert Xue      <doc>
5526*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5527*dc5640d1SHerbert Xue      </doc>
5528*dc5640d1SHerbert Xue    </method>
5529*dc5640d1SHerbert Xue    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5530*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5531*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5532*dc5640d1SHerbert Xue      deprecated="not deprecated">
5533*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5534*dc5640d1SHerbert Xue      <doc>
5535*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches only the given object.]]>
5536*dc5640d1SHerbert Xue      </doc>
5537*dc5640d1SHerbert Xue    </method>
5538*dc5640d1SHerbert Xue    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5539*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5540*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5541*dc5640d1SHerbert Xue      deprecated="not deprecated">
5542*dc5640d1SHerbert Xue      <param name="targetPackage" type="java.lang.Package"/>
5543*dc5640d1SHerbert Xue      <doc>
5544*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5545*dc5640d1SHerbert Xue classloader, so classes with the same package name may not have the same package at runtime.]]>
5546*dc5640d1SHerbert Xue      </doc>
5547*dc5640d1SHerbert Xue    </method>
5548*dc5640d1SHerbert Xue    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5549*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5550*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5551*dc5640d1SHerbert Xue      deprecated="not deprecated">
5552*dc5640d1SHerbert Xue      <param name="targetPackageName" type="java.lang.String"/>
5553*dc5640d1SHerbert Xue      <doc>
5554*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5555*dc5640d1SHerbert Xue {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5556*dc5640d1SHerbert Xue
5557*dc5640d1SHerbert Xue @since 2.0]]>
5558*dc5640d1SHerbert Xue      </doc>
5559*dc5640d1SHerbert Xue    </method>
5560*dc5640d1SHerbert Xue    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5561*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5562*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5563*dc5640d1SHerbert Xue      deprecated="not deprecated">
5564*dc5640d1SHerbert Xue      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5565*dc5640d1SHerbert Xue      <doc>
5566*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5567*dc5640d1SHerbert Xue      </doc>
5568*dc5640d1SHerbert Xue    </method>
5569*dc5640d1SHerbert Xue    <doc>
5570*dc5640d1SHerbert Xue    <![CDATA[Matcher implementations. Supports matching classes and methods.
5571*dc5640d1SHerbert Xue
5572*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5573*dc5640d1SHerbert Xue    </doc>
5574*dc5640d1SHerbert Xue  </class>
5575*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.Matchers -->
5576*dc5640d1SHerbert Xue</package>
5577*dc5640d1SHerbert Xue<package name="com.google.inject.multibindings">
5578*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ClassMapKey -->
5579*dc5640d1SHerbert Xue  <class name="ClassMapKey"    abstract="true"
5580*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5581*dc5640d1SHerbert Xue    deprecated="not deprecated">
5582*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
5583*dc5640d1SHerbert Xue    <doc>
5584*dc5640d1SHerbert Xue    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a class map key.
5585*dc5640d1SHerbert Xue
5586*dc5640d1SHerbert Xue @since 4.0]]>
5587*dc5640d1SHerbert Xue    </doc>
5588*dc5640d1SHerbert Xue  </class>
5589*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ClassMapKey -->
5590*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MapBinder -->
5591*dc5640d1SHerbert Xue  <class name="MapBinder" extends="java.lang.Object"
5592*dc5640d1SHerbert Xue    abstract="true"
5593*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5594*dc5640d1SHerbert Xue    deprecated="not deprecated">
5595*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5596*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5597*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5598*dc5640d1SHerbert Xue      deprecated="not deprecated">
5599*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5600*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5601*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5602*dc5640d1SHerbert Xue      <doc>
5603*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5604*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5605*dc5640d1SHerbert Xue      </doc>
5606*dc5640d1SHerbert Xue    </method>
5607*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5608*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5609*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5610*dc5640d1SHerbert Xue      deprecated="not deprecated">
5611*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5612*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5613*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5614*dc5640d1SHerbert Xue      <doc>
5615*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5616*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5617*dc5640d1SHerbert Xue      </doc>
5618*dc5640d1SHerbert Xue    </method>
5619*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5620*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5621*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5622*dc5640d1SHerbert Xue      deprecated="not deprecated">
5623*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5624*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5625*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5626*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5627*dc5640d1SHerbert Xue      <doc>
5628*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5629*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5630*dc5640d1SHerbert Xue      </doc>
5631*dc5640d1SHerbert Xue    </method>
5632*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5633*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5634*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5635*dc5640d1SHerbert Xue      deprecated="not deprecated">
5636*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5637*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5638*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5639*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5640*dc5640d1SHerbert Xue      <doc>
5641*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5642*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5643*dc5640d1SHerbert Xue      </doc>
5644*dc5640d1SHerbert Xue    </method>
5645*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5646*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5647*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5648*dc5640d1SHerbert Xue      deprecated="not deprecated">
5649*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5650*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5651*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5652*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5653*dc5640d1SHerbert Xue      <doc>
5654*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5655*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5656*dc5640d1SHerbert Xue      </doc>
5657*dc5640d1SHerbert Xue    </method>
5658*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5659*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5660*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5661*dc5640d1SHerbert Xue      deprecated="not deprecated">
5662*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5663*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5664*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5665*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5666*dc5640d1SHerbert Xue      <doc>
5667*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5668*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5669*dc5640d1SHerbert Xue      </doc>
5670*dc5640d1SHerbert Xue    </method>
5671*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5672*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5673*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5674*dc5640d1SHerbert Xue      deprecated="not deprecated">
5675*dc5640d1SHerbert Xue      <doc>
5676*dc5640d1SHerbert Xue      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5677*dc5640d1SHerbert Xue <p>When multiple equal keys are bound, the value that gets included in the map is
5678*dc5640d1SHerbert Xue arbitrary.
5679*dc5640d1SHerbert Xue <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5680*dc5640d1SHerbert Xue maps that are normally bound, a {@code Map<K, Set<V>>} and
5681*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5682*dc5640d1SHerbert Xue all values bound to each key.
5683*dc5640d1SHerbert Xue <p>
5684*dc5640d1SHerbert Xue When multiple modules contribute elements to the map, this configuration
5685*dc5640d1SHerbert Xue option impacts all of them.
5686*dc5640d1SHerbert Xue
5687*dc5640d1SHerbert Xue @return this map binder
5688*dc5640d1SHerbert Xue @since 3.0]]>
5689*dc5640d1SHerbert Xue      </doc>
5690*dc5640d1SHerbert Xue    </method>
5691*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5692*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5693*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5694*dc5640d1SHerbert Xue      deprecated="not deprecated">
5695*dc5640d1SHerbert Xue      <param name="key" type="K"/>
5696*dc5640d1SHerbert Xue      <doc>
5697*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5698*dc5640d1SHerbert Xue key must be distinct (and non-null). Bound providers will be evaluated each
5699*dc5640d1SHerbert Xue time the map is injected.
5700*dc5640d1SHerbert Xue
5701*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
5702*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
5703*dc5640d1SHerbert Xue
5704*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
5705*dc5640d1SHerbert Xue to specify a binding scope.]]>
5706*dc5640d1SHerbert Xue      </doc>
5707*dc5640d1SHerbert Xue    </method>
5708*dc5640d1SHerbert Xue    <doc>
5709*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5710*dc5640d1SHerbert Xue a complete map. MapBinder is intended for use in your application's module:
5711*dc5640d1SHerbert Xue <pre><code>
5712*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
5713*dc5640d1SHerbert Xue   protected void configure() {
5714*dc5640d1SHerbert Xue     MapBinder&lt;String, Snack&gt; mapbinder
5715*dc5640d1SHerbert Xue         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5716*dc5640d1SHerbert Xue     mapbinder.addBinding("twix").toInstance(new Twix());
5717*dc5640d1SHerbert Xue     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5718*dc5640d1SHerbert Xue     mapbinder.addBinding("skittles").to(Skittles.class);
5719*dc5640d1SHerbert Xue   }
5720*dc5640d1SHerbert Xue }</code></pre>
5721*dc5640d1SHerbert Xue
5722*dc5640d1SHerbert Xue <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5723*dc5640d1SHerbert Xue injected:
5724*dc5640d1SHerbert Xue <pre><code>
5725*dc5640d1SHerbert Xue class SnackMachine {
5726*dc5640d1SHerbert Xue   {@literal @}Inject
5727*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5728*dc5640d1SHerbert Xue }</code></pre>
5729*dc5640d1SHerbert Xue
5730*dc5640d1SHerbert Xue <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5731*dc5640d1SHerbert Xue {@code Map<K, Provider<V>>} for lazy value provision:
5732*dc5640d1SHerbert Xue <pre><code>
5733*dc5640d1SHerbert Xue class SnackMachine {
5734*dc5640d1SHerbert Xue   {@literal @}Inject
5735*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5736*dc5640d1SHerbert Xue }</code></pre>
5737*dc5640d1SHerbert Xue
5738*dc5640d1SHerbert Xue <p>Contributing mapbindings from different modules is supported. For example,
5739*dc5640d1SHerbert Xue it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5740*dc5640d1SHerbert Xue create their own {@code MapBinder<String, Snack>}, and to each contribute
5741*dc5640d1SHerbert Xue bindings to the snacks map. When that map is injected, it will contain
5742*dc5640d1SHerbert Xue entries from both modules.
5743*dc5640d1SHerbert Xue
5744*dc5640d1SHerbert Xue <p>The map's iteration order is consistent with the binding order. This is
5745*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
5746*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
5747*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
5748*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
5749*dc5640d1SHerbert Xue
5750*dc5640d1SHerbert Xue <p>The map is unmodifiable.  Elements can only be added to the map by
5751*dc5640d1SHerbert Xue configuring the MapBinder.  Elements can never be removed from the map.
5752*dc5640d1SHerbert Xue
5753*dc5640d1SHerbert Xue <p>Values are resolved at map injection time. If a value is bound to a
5754*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the map is
5755*dc5640d1SHerbert Xue injected (unless the binding is also scoped, or a map of providers is injected).
5756*dc5640d1SHerbert Xue
5757*dc5640d1SHerbert Xue <p>Annotations are used to create different maps of the same key/value
5758*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent map.
5759*dc5640d1SHerbert Xue
5760*dc5640d1SHerbert Xue <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5761*dc5640d1SHerbert Xue once, map injection will fail. However, use {@link #permitDuplicates()} in
5762*dc5640d1SHerbert Xue order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5763*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>} will be added.
5764*dc5640d1SHerbert Xue
5765*dc5640d1SHerbert Xue <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5766*dc5640d1SHerbert Xue throw an unchecked exception.
5767*dc5640d1SHerbert Xue
5768*dc5640d1SHerbert Xue <p><strong>Values must be non-null to use map injection.</strong> If any
5769*dc5640d1SHerbert Xue value is null, map injection will fail (although injecting a map of providers
5770*dc5640d1SHerbert Xue will not).
5771*dc5640d1SHerbert Xue
5772*dc5640d1SHerbert Xue @author [email protected] (David P. Baker)]]>
5773*dc5640d1SHerbert Xue    </doc>
5774*dc5640d1SHerbert Xue  </class>
5775*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MapBinder -->
5776*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5777*dc5640d1SHerbert Xue  <interface name="MapBinderBinding"    abstract="true"
5778*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5779*dc5640d1SHerbert Xue    deprecated="not deprecated">
5780*dc5640d1SHerbert Xue    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5781*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5782*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5783*dc5640d1SHerbert Xue      deprecated="not deprecated">
5784*dc5640d1SHerbert Xue      <doc>
5785*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the map.]]>
5786*dc5640d1SHerbert Xue      </doc>
5787*dc5640d1SHerbert Xue    </method>
5788*dc5640d1SHerbert Xue    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5789*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5790*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5791*dc5640d1SHerbert Xue      deprecated="not deprecated">
5792*dc5640d1SHerbert Xue      <doc>
5793*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5794*dc5640d1SHerbert Xue <p>
5795*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5796*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5797*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
5798*dc5640d1SHerbert Xue      </doc>
5799*dc5640d1SHerbert Xue    </method>
5800*dc5640d1SHerbert Xue    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5801*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5802*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5803*dc5640d1SHerbert Xue      deprecated="not deprecated">
5804*dc5640d1SHerbert Xue      <doc>
5805*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the values of the map.
5806*dc5640d1SHerbert Xue <p>
5807*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5808*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5809*dc5640d1SHerbert Xue <code>TypeLiteral&lt;Snack></code>.]]>
5810*dc5640d1SHerbert Xue      </doc>
5811*dc5640d1SHerbert Xue    </method>
5812*dc5640d1SHerbert Xue    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5813*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5814*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5815*dc5640d1SHerbert Xue      deprecated="not deprecated">
5816*dc5640d1SHerbert Xue      <doc>
5817*dc5640d1SHerbert Xue      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5818*dc5640d1SHerbert Xue to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5819*dc5640d1SHerbert Xue This is only supported on bindings returned from an injector. This will throw
5820*dc5640d1SHerbert Xue {@link UnsupportedOperationException} if it is called on an element retrieved from
5821*dc5640d1SHerbert Xue {@link Elements#getElements}.
5822*dc5640d1SHerbert Xue <p>
5823*dc5640d1SHerbert Xue The elements will always match the type Map's generic type. For example, if getMapKey returns a
5824*dc5640d1SHerbert Xue key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5825*dc5640d1SHerbert Xue <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5826*dc5640d1SHerbert Xue      </doc>
5827*dc5640d1SHerbert Xue    </method>
5828*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
5829*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5830*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5831*dc5640d1SHerbert Xue      deprecated="not deprecated">
5832*dc5640d1SHerbert Xue      <doc>
5833*dc5640d1SHerbert Xue      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5834*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5835*dc5640d1SHerbert Xue MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5836*dc5640d1SHerbert Xue      </doc>
5837*dc5640d1SHerbert Xue    </method>
5838*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
5839*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5840*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5841*dc5640d1SHerbert Xue      deprecated="not deprecated">
5842*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
5843*dc5640d1SHerbert Xue      <doc>
5844*dc5640d1SHerbert Xue      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5845*dc5640d1SHerbert Xue given Element in order to support building and injecting the map. This will work for
5846*dc5640d1SHerbert Xue MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5847*dc5640d1SHerbert Xue only necessary if you are working with elements retrieved from modules (without an Injector),
5848*dc5640d1SHerbert Xue otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5849*dc5640d1SHerbert Xue <p>
5850*dc5640d1SHerbert Xue If you need to introspect the details of the map, such as the keys, values or if it permits
5851*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
5852*dc5640d1SHerbert Xue {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5853*dc5640d1SHerbert Xue      </doc>
5854*dc5640d1SHerbert Xue    </method>
5855*dc5640d1SHerbert Xue    <doc>
5856*dc5640d1SHerbert Xue    <![CDATA[A binding for a MapBinder.
5857*dc5640d1SHerbert Xue <p>
5858*dc5640d1SHerbert Xue Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5859*dc5640d1SHerbert Xue &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5860*dc5640d1SHerbert Xue Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5861*dc5640d1SHerbert Xue MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5862*dc5640d1SHerbert Xue bindings can be validated to be derived from this MapBinderBinding using
5863*dc5640d1SHerbert Xue {@link #containsElement(Element)}.
5864*dc5640d1SHerbert Xue
5865*dc5640d1SHerbert Xue @param <T> The fully qualified type of the map, including Map. For example:
5866*dc5640d1SHerbert Xue          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5867*dc5640d1SHerbert Xue
5868*dc5640d1SHerbert Xue @since 3.0
5869*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
5870*dc5640d1SHerbert Xue    </doc>
5871*dc5640d1SHerbert Xue  </interface>
5872*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5873*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MapKey -->
5874*dc5640d1SHerbert Xue  <class name="MapKey"    abstract="true"
5875*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5876*dc5640d1SHerbert Xue    deprecated="not deprecated">
5877*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
5878*dc5640d1SHerbert Xue    <doc>
5879*dc5640d1SHerbert Xue    <![CDATA[Allows users define customized key type annotations for map bindings by annotating an annotation
5880*dc5640d1SHerbert Xue of a {@code Map}'s key type. The custom key annotation can be applied to methods also annotated
5881*dc5640d1SHerbert Xue with {@literal @}{@link ProvidesIntoMap}.
5882*dc5640d1SHerbert Xue
5883*dc5640d1SHerbert Xue <p>A {@link StringMapKey} and {@link ClassMapKey} are provided for convenience with maps whose
5884*dc5640d1SHerbert Xue keys are strings or classes. For maps with enums or primitive types as keys, you must provide
5885*dc5640d1SHerbert Xue your own MapKey annotation, such as this one for an enum:
5886*dc5640d1SHerbert Xue
5887*dc5640d1SHerbert Xue <pre>
5888*dc5640d1SHerbert Xue {@literal @}MapKey(unwrapValue = true)
5889*dc5640d1SHerbert Xue {@literal @}Retention(RUNTIME)
5890*dc5640d1SHerbert Xue public {@literal @}interface MyCustomEnumKey {
5891*dc5640d1SHerbert Xue   MyCustomEnum value();
5892*dc5640d1SHerbert Xue }
5893*dc5640d1SHerbert Xue </pre>
5894*dc5640d1SHerbert Xue
5895*dc5640d1SHerbert Xue You can also use the whole annotation as the key, if {@code unwrapValue=false}.
5896*dc5640d1SHerbert Xue When unwrapValue is false, the annotation type will be the key type for the injected map and
5897*dc5640d1SHerbert Xue the annotation instances will be the key values. If {@code unwrapValue=true}, the value() type
5898*dc5640d1SHerbert Xue will be the key type for injected map and the value() instances will be the keys values.
5899*dc5640d1SHerbert Xue
5900*dc5640d1SHerbert Xue @since 4.0]]>
5901*dc5640d1SHerbert Xue    </doc>
5902*dc5640d1SHerbert Xue  </class>
5903*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MapKey -->
5904*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.Multibinder -->
5905*dc5640d1SHerbert Xue  <class name="Multibinder" extends="java.lang.Object"
5906*dc5640d1SHerbert Xue    abstract="true"
5907*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5908*dc5640d1SHerbert Xue    deprecated="not deprecated">
5909*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5910*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5911*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5912*dc5640d1SHerbert Xue      deprecated="not deprecated">
5913*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5914*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5915*dc5640d1SHerbert Xue      <doc>
5916*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5917*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5918*dc5640d1SHerbert Xue      </doc>
5919*dc5640d1SHerbert Xue    </method>
5920*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5921*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5922*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5923*dc5640d1SHerbert Xue      deprecated="not deprecated">
5924*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5925*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5926*dc5640d1SHerbert Xue      <doc>
5927*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5928*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5929*dc5640d1SHerbert Xue      </doc>
5930*dc5640d1SHerbert Xue    </method>
5931*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5932*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5933*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5934*dc5640d1SHerbert Xue      deprecated="not deprecated">
5935*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5936*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5937*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5938*dc5640d1SHerbert Xue      <doc>
5939*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5940*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5941*dc5640d1SHerbert Xue      </doc>
5942*dc5640d1SHerbert Xue    </method>
5943*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5944*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5945*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5946*dc5640d1SHerbert Xue      deprecated="not deprecated">
5947*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5948*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5949*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5950*dc5640d1SHerbert Xue      <doc>
5951*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5952*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5953*dc5640d1SHerbert Xue      </doc>
5954*dc5640d1SHerbert Xue    </method>
5955*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5956*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5957*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5958*dc5640d1SHerbert Xue      deprecated="not deprecated">
5959*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5960*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5961*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5962*dc5640d1SHerbert Xue      <doc>
5963*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5964*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5965*dc5640d1SHerbert Xue      </doc>
5966*dc5640d1SHerbert Xue    </method>
5967*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5968*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5969*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5970*dc5640d1SHerbert Xue      deprecated="not deprecated">
5971*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5972*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
5973*dc5640d1SHerbert Xue      <doc>
5974*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of the key's type in a {@link Set} that is
5975*dc5640d1SHerbert Xue itself bound with the annotation (if any) of the key.
5976*dc5640d1SHerbert Xue
5977*dc5640d1SHerbert Xue @since 4.0]]>
5978*dc5640d1SHerbert Xue      </doc>
5979*dc5640d1SHerbert Xue    </method>
5980*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5981*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5982*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5983*dc5640d1SHerbert Xue      deprecated="not deprecated">
5984*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5985*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5986*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5987*dc5640d1SHerbert Xue      <doc>
5988*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5989*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5990*dc5640d1SHerbert Xue      </doc>
5991*dc5640d1SHerbert Xue    </method>
5992*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5993*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5994*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5995*dc5640d1SHerbert Xue      deprecated="not deprecated">
5996*dc5640d1SHerbert Xue      <doc>
5997*dc5640d1SHerbert Xue      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5998*dc5640d1SHerbert Xue bound, the one that gets included is arbitrary. When multiple modules contribute elements to
5999*dc5640d1SHerbert Xue the set, this configuration option impacts all of them.
6000*dc5640d1SHerbert Xue
6001*dc5640d1SHerbert Xue @return this multibinder
6002*dc5640d1SHerbert Xue @since 3.0]]>
6003*dc5640d1SHerbert Xue      </doc>
6004*dc5640d1SHerbert Xue    </method>
6005*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6006*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6007*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6008*dc5640d1SHerbert Xue      deprecated="not deprecated">
6009*dc5640d1SHerbert Xue      <doc>
6010*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new element in the set. Each
6011*dc5640d1SHerbert Xue bound element must have a distinct value. Bound providers will be
6012*dc5640d1SHerbert Xue evaluated each time the set is injected.
6013*dc5640d1SHerbert Xue
6014*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
6015*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
6016*dc5640d1SHerbert Xue
6017*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
6018*dc5640d1SHerbert Xue to specify a binding scope.]]>
6019*dc5640d1SHerbert Xue      </doc>
6020*dc5640d1SHerbert Xue    </method>
6021*dc5640d1SHerbert Xue    <doc>
6022*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple values separately, only to later inject them as a
6023*dc5640d1SHerbert Xue complete collection. Multibinder is intended for use in your application's
6024*dc5640d1SHerbert Xue module:
6025*dc5640d1SHerbert Xue <pre><code>
6026*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
6027*dc5640d1SHerbert Xue   protected void configure() {
6028*dc5640d1SHerbert Xue     Multibinder&lt;Snack&gt; multibinder
6029*dc5640d1SHerbert Xue         = Multibinder.newSetBinder(binder(), Snack.class);
6030*dc5640d1SHerbert Xue     multibinder.addBinding().toInstance(new Twix());
6031*dc5640d1SHerbert Xue     multibinder.addBinding().toProvider(SnickersProvider.class);
6032*dc5640d1SHerbert Xue     multibinder.addBinding().to(Skittles.class);
6033*dc5640d1SHerbert Xue   }
6034*dc5640d1SHerbert Xue }</code></pre>
6035*dc5640d1SHerbert Xue
6036*dc5640d1SHerbert Xue <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
6037*dc5640d1SHerbert Xue <pre><code>
6038*dc5640d1SHerbert Xue class SnackMachine {
6039*dc5640d1SHerbert Xue   {@literal @}Inject
6040*dc5640d1SHerbert Xue   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
6041*dc5640d1SHerbert Xue }</code></pre>
6042*dc5640d1SHerbert Xue
6043*dc5640d1SHerbert Xue If desired, {@link Collection}{@code <Provider<Snack>>} can also be injected.
6044*dc5640d1SHerbert Xue
6045*dc5640d1SHerbert Xue <p>Contributing multibindings from different modules is supported. For
6046*dc5640d1SHerbert Xue example, it is okay for both {@code CandyModule} and {@code ChipsModule}
6047*dc5640d1SHerbert Xue to create their own {@code Multibinder<Snack>}, and to each contribute
6048*dc5640d1SHerbert Xue bindings to the set of snacks. When that set is injected, it will contain
6049*dc5640d1SHerbert Xue elements from both modules.
6050*dc5640d1SHerbert Xue
6051*dc5640d1SHerbert Xue <p>The set's iteration order is consistent with the binding order. This is
6052*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
6053*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
6054*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
6055*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
6056*dc5640d1SHerbert Xue
6057*dc5640d1SHerbert Xue <p>The set is unmodifiable.  Elements can only be added to the set by
6058*dc5640d1SHerbert Xue configuring the multibinder.  Elements can never be removed from the set.
6059*dc5640d1SHerbert Xue
6060*dc5640d1SHerbert Xue <p>Elements are resolved at set injection time. If an element is bound to a
6061*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the set is
6062*dc5640d1SHerbert Xue injected (unless the binding is also scoped).
6063*dc5640d1SHerbert Xue
6064*dc5640d1SHerbert Xue <p>Annotations are be used to create different sets of the same element
6065*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent collection of
6066*dc5640d1SHerbert Xue elements.
6067*dc5640d1SHerbert Xue
6068*dc5640d1SHerbert Xue <p><strong>Elements must be distinct.</strong> If multiple bound elements
6069*dc5640d1SHerbert Xue have the same value, set injection will fail.
6070*dc5640d1SHerbert Xue
6071*dc5640d1SHerbert Xue <p><strong>Elements must be non-null.</strong> If any set element is null,
6072*dc5640d1SHerbert Xue set injection will fail.
6073*dc5640d1SHerbert Xue
6074*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
6075*dc5640d1SHerbert Xue    </doc>
6076*dc5640d1SHerbert Xue  </class>
6077*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.Multibinder -->
6078*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
6079*dc5640d1SHerbert Xue  <interface name="MultibinderBinding"    abstract="true"
6080*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6081*dc5640d1SHerbert Xue    deprecated="not deprecated">
6082*dc5640d1SHerbert Xue    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
6083*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6084*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6085*dc5640d1SHerbert Xue      deprecated="not deprecated">
6086*dc5640d1SHerbert Xue      <doc>
6087*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the set.]]>
6088*dc5640d1SHerbert Xue      </doc>
6089*dc5640d1SHerbert Xue    </method>
6090*dc5640d1SHerbert Xue    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
6091*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6092*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6093*dc5640d1SHerbert Xue      deprecated="not deprecated">
6094*dc5640d1SHerbert Xue      <doc>
6095*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6096*dc5640d1SHerbert Xue <p>
6097*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6098*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a
6099*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
6100*dc5640d1SHerbert Xue      </doc>
6101*dc5640d1SHerbert Xue    </method>
6102*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6103*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6104*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6105*dc5640d1SHerbert Xue      deprecated="not deprecated">
6106*dc5640d1SHerbert Xue      <doc>
6107*dc5640d1SHerbert Xue      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6108*dc5640d1SHerbert Xue injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6109*dc5640d1SHerbert Xue retrieved from {@link Elements#getElements}.
6110*dc5640d1SHerbert Xue <p>
6111*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6112*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a list of type
6113*dc5640d1SHerbert Xue <code>List&lt;Binding&lt;String>></code>.]]>
6114*dc5640d1SHerbert Xue      </doc>
6115*dc5640d1SHerbert Xue    </method>
6116*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
6117*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6118*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6119*dc5640d1SHerbert Xue      deprecated="not deprecated">
6120*dc5640d1SHerbert Xue      <doc>
6121*dc5640d1SHerbert Xue      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6122*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6123*dc5640d1SHerbert Xue MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6124*dc5640d1SHerbert Xue      </doc>
6125*dc5640d1SHerbert Xue    </method>
6126*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
6127*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6128*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6129*dc5640d1SHerbert Xue      deprecated="not deprecated">
6130*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
6131*dc5640d1SHerbert Xue      <doc>
6132*dc5640d1SHerbert Xue      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6133*dc5640d1SHerbert Xue derive the elements of the set and other bindings that Multibinder uses internally. This will
6134*dc5640d1SHerbert Xue work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6135*dc5640d1SHerbert Xue Usually this is only necessary if you are working with elements retrieved from modules (without
6136*dc5640d1SHerbert Xue an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6137*dc5640d1SHerbert Xue <p>
6138*dc5640d1SHerbert Xue If you need to introspect the details of the set, such as the values or if it permits
6139*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
6140*dc5640d1SHerbert Xue {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6141*dc5640d1SHerbert Xue      </doc>
6142*dc5640d1SHerbert Xue    </method>
6143*dc5640d1SHerbert Xue    <doc>
6144*dc5640d1SHerbert Xue    <![CDATA[A binding for a Multibinder.
6145*dc5640d1SHerbert Xue
6146*dc5640d1SHerbert Xue @param <T> The fully qualified type of the set, including Set. For example:
6147*dc5640d1SHerbert Xue          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6148*dc5640d1SHerbert Xue
6149*dc5640d1SHerbert Xue @since 3.0
6150*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6151*dc5640d1SHerbert Xue    </doc>
6152*dc5640d1SHerbert Xue  </interface>
6153*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6154*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MultibindingsScanner -->
6155*dc5640d1SHerbert Xue  <class name="MultibindingsScanner" extends="java.lang.Object"
6156*dc5640d1SHerbert Xue    abstract="false"
6157*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6158*dc5640d1SHerbert Xue    deprecated="not deprecated">
6159*dc5640d1SHerbert Xue    <method name="asModule" return="com.google.inject.Module"
6160*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6161*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6162*dc5640d1SHerbert Xue      deprecated="not deprecated">
6163*dc5640d1SHerbert Xue      <doc>
6164*dc5640d1SHerbert Xue      <![CDATA[Returns a module that, when installed, will scan all modules for methods with the annotations
6165*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoMap}, {@literal @}{@link ProvidesIntoSet}, and
6166*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoOptional}.
6167*dc5640d1SHerbert Xue
6168*dc5640d1SHerbert Xue <p>This is a convenience method, equivalent to doing
6169*dc5640d1SHerbert Xue {@code binder().scanModulesForAnnotatedMethods(MultibindingsScanner.scanner())}.]]>
6170*dc5640d1SHerbert Xue      </doc>
6171*dc5640d1SHerbert Xue    </method>
6172*dc5640d1SHerbert Xue    <method name="scanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
6173*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6174*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6175*dc5640d1SHerbert Xue      deprecated="not deprecated">
6176*dc5640d1SHerbert Xue      <doc>
6177*dc5640d1SHerbert Xue      <![CDATA[Returns a {@link ModuleAnnotatedMethodScanner} that, when bound, will scan all modules for
6178*dc5640d1SHerbert Xue methods with the annotations {@literal @}{@link ProvidesIntoMap},
6179*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoSet}, and {@literal @}{@link ProvidesIntoOptional}.]]>
6180*dc5640d1SHerbert Xue      </doc>
6181*dc5640d1SHerbert Xue    </method>
6182*dc5640d1SHerbert Xue    <doc>
6183*dc5640d1SHerbert Xue    <![CDATA[Scans a module for annotations that signal multibindings, mapbindings, and optional bindings.
6184*dc5640d1SHerbert Xue
6185*dc5640d1SHerbert Xue @since 4.0]]>
6186*dc5640d1SHerbert Xue    </doc>
6187*dc5640d1SHerbert Xue  </class>
6188*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MultibindingsScanner -->
6189*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6190*dc5640d1SHerbert Xue  <interface name="MultibindingsTargetVisitor"    abstract="true"
6191*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6192*dc5640d1SHerbert Xue    deprecated="not deprecated">
6193*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6194*dc5640d1SHerbert Xue    <method name="visit" return="V"
6195*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6196*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6197*dc5640d1SHerbert Xue      deprecated="not deprecated">
6198*dc5640d1SHerbert Xue      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6199*dc5640d1SHerbert Xue      <doc>
6200*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6201*dc5640d1SHerbert Xue      </doc>
6202*dc5640d1SHerbert Xue    </method>
6203*dc5640d1SHerbert Xue    <method name="visit" return="V"
6204*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6205*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6206*dc5640d1SHerbert Xue      deprecated="not deprecated">
6207*dc5640d1SHerbert Xue      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6208*dc5640d1SHerbert Xue      <doc>
6209*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6210*dc5640d1SHerbert Xue      </doc>
6211*dc5640d1SHerbert Xue    </method>
6212*dc5640d1SHerbert Xue    <method name="visit" return="V"
6213*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6214*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6215*dc5640d1SHerbert Xue      deprecated="not deprecated">
6216*dc5640d1SHerbert Xue      <param name="optionalbinding" type="com.google.inject.multibindings.OptionalBinderBinding&lt;? extends T&gt;"/>
6217*dc5640d1SHerbert Xue      <doc>
6218*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link OptionalBinder}.
6219*dc5640d1SHerbert Xue
6220*dc5640d1SHerbert Xue @since 4.0]]>
6221*dc5640d1SHerbert Xue      </doc>
6222*dc5640d1SHerbert Xue    </method>
6223*dc5640d1SHerbert Xue    <doc>
6224*dc5640d1SHerbert Xue    <![CDATA[A visitor for the multibinder extension.
6225*dc5640d1SHerbert Xue <p>
6226*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6227*dc5640d1SHerbert Xue {@link Multibinder}, {@link MapBinder} or {@link OptionalBinderBinding} will be visited through
6228*dc5640d1SHerbert Xue this interface.
6229*dc5640d1SHerbert Xue
6230*dc5640d1SHerbert Xue @since 3.0
6231*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6232*dc5640d1SHerbert Xue    </doc>
6233*dc5640d1SHerbert Xue  </interface>
6234*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6235*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.OptionalBinder -->
6236*dc5640d1SHerbert Xue  <class name="OptionalBinder" extends="java.lang.Object"
6237*dc5640d1SHerbert Xue    abstract="true"
6238*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6239*dc5640d1SHerbert Xue    deprecated="not deprecated">
6240*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6241*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6242*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6243*dc5640d1SHerbert Xue      deprecated="not deprecated">
6244*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6245*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
6246*dc5640d1SHerbert Xue    </method>
6247*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6248*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6249*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6250*dc5640d1SHerbert Xue      deprecated="not deprecated">
6251*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6252*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
6253*dc5640d1SHerbert Xue    </method>
6254*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6255*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6256*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6257*dc5640d1SHerbert Xue      deprecated="not deprecated">
6258*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6259*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.Key&lt;T&gt;"/>
6260*dc5640d1SHerbert Xue    </method>
6261*dc5640d1SHerbert Xue    <method name="setDefault" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6262*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6263*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6264*dc5640d1SHerbert Xue      deprecated="not deprecated">
6265*dc5640d1SHerbert Xue      <doc>
6266*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to set the default value that will be injected.
6267*dc5640d1SHerbert Xue The binding set by this method will be ignored if {@link #setBinding} is called.
6268*dc5640d1SHerbert Xue
6269*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the {@code to}
6270*dc5640d1SHerbert Xue methods on the returned binding builder.]]>
6271*dc5640d1SHerbert Xue      </doc>
6272*dc5640d1SHerbert Xue    </method>
6273*dc5640d1SHerbert Xue    <method name="setBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6274*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6275*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6276*dc5640d1SHerbert Xue      deprecated="not deprecated">
6277*dc5640d1SHerbert Xue      <doc>
6278*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to set the actual value that will be injected.
6279*dc5640d1SHerbert Xue This overrides any binding set by {@link #setDefault}.
6280*dc5640d1SHerbert Xue
6281*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the {@code to}
6282*dc5640d1SHerbert Xue methods on the returned binding builder.]]>
6283*dc5640d1SHerbert Xue      </doc>
6284*dc5640d1SHerbert Xue    </method>
6285*dc5640d1SHerbert Xue    <doc>
6286*dc5640d1SHerbert Xue    <![CDATA[An API to bind optional values, optionally with a default value.
6287*dc5640d1SHerbert Xue OptionalBinder fulfills two roles: <ol>
6288*dc5640d1SHerbert Xue <li>It allows a framework to define an injection point that may or
6289*dc5640d1SHerbert Xue     may not be bound by users.
6290*dc5640d1SHerbert Xue <li>It allows a framework to supply a default value that can be changed
6291*dc5640d1SHerbert Xue     by users.
6292*dc5640d1SHerbert Xue </ol>
6293*dc5640d1SHerbert Xue
6294*dc5640d1SHerbert Xue <p>When an OptionalBinder is added, it will always supply the bindings:
6295*dc5640d1SHerbert Xue {@code Optional<T>} and {@code Optional<Provider<T>>}.  If
6296*dc5640d1SHerbert Xue {@link #setBinding} or {@link #setDefault} are called, it will also
6297*dc5640d1SHerbert Xue bind {@code T}.
6298*dc5640d1SHerbert Xue
6299*dc5640d1SHerbert Xue <p>{@code setDefault} is intended for use by frameworks that need a default
6300*dc5640d1SHerbert Xue value.  User code can call {@code setBinding} to override the default.
6301*dc5640d1SHerbert Xue <b>Warning: Even if setBinding is called, the default binding
6302*dc5640d1SHerbert Xue will still exist in the object graph.  If it is a singleton, it will be
6303*dc5640d1SHerbert Xue instantiated in {@code Stage.PRODUCTION}.</b>
6304*dc5640d1SHerbert Xue
6305*dc5640d1SHerbert Xue <p>If setDefault or setBinding are linked to Providers, the Provider may return
6306*dc5640d1SHerbert Xue {@code null}.  If it does, the Optional bindings will be absent.  Binding
6307*dc5640d1SHerbert Xue setBinding to a Provider that returns null will not cause OptionalBinder
6308*dc5640d1SHerbert Xue to fall back to the setDefault binding.
6309*dc5640d1SHerbert Xue
6310*dc5640d1SHerbert Xue <p>If neither setDefault nor setBinding are called, it will try to link to a
6311*dc5640d1SHerbert Xue user-supplied binding of the same type.  If no binding exists, the optionals
6312*dc5640d1SHerbert Xue will be absent.  Otherwise, if a user-supplied binding of that type exists,
6313*dc5640d1SHerbert Xue or if setBinding or setDefault are called, the optionals will return present
6314*dc5640d1SHerbert Xue if they are bound to a non-null value.
6315*dc5640d1SHerbert Xue
6316*dc5640d1SHerbert Xue <p>Values are resolved at injection time. If a value is bound to a
6317*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the optional
6318*dc5640d1SHerbert Xue is injected (unless the binding is also scoped, or an optional of provider is
6319*dc5640d1SHerbert Xue injected).
6320*dc5640d1SHerbert Xue
6321*dc5640d1SHerbert Xue <p>Annotations are used to create different optionals of the same key/value
6322*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent binding.
6323*dc5640d1SHerbert Xue
6324*dc5640d1SHerbert Xue <pre><code>
6325*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6326*dc5640d1SHerbert Xue   protected void configure() {
6327*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Renamer.class);
6328*dc5640d1SHerbert Xue   }
6329*dc5640d1SHerbert Xue }</code></pre>
6330*dc5640d1SHerbert Xue
6331*dc5640d1SHerbert Xue <p>With this module, an {@link Optional}{@code <Renamer>} can now be
6332*dc5640d1SHerbert Xue injected.  With no other bindings, the optional will be absent.
6333*dc5640d1SHerbert Xue Users can specify bindings in one of two ways:
6334*dc5640d1SHerbert Xue
6335*dc5640d1SHerbert Xue <p>Option 1:
6336*dc5640d1SHerbert Xue <pre><code>
6337*dc5640d1SHerbert Xue public class UserRenamerModule extends AbstractModule {
6338*dc5640d1SHerbert Xue   protected void configure() {
6339*dc5640d1SHerbert Xue     bind(Renamer.class).to(ReplacingRenamer.class);
6340*dc5640d1SHerbert Xue   }
6341*dc5640d1SHerbert Xue }</code></pre>
6342*dc5640d1SHerbert Xue
6343*dc5640d1SHerbert Xue <p>or Option 2:
6344*dc5640d1SHerbert Xue <pre><code>
6345*dc5640d1SHerbert Xue public class UserRenamerModule extends AbstractModule {
6346*dc5640d1SHerbert Xue   protected void configure() {
6347*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Renamer.class)
6348*dc5640d1SHerbert Xue         .setBinding().to(ReplacingRenamer.class);
6349*dc5640d1SHerbert Xue   }
6350*dc5640d1SHerbert Xue }</code></pre>
6351*dc5640d1SHerbert Xue With both options, the {@code Optional<Renamer>} will be present and supply the
6352*dc5640d1SHerbert Xue ReplacingRenamer.
6353*dc5640d1SHerbert Xue
6354*dc5640d1SHerbert Xue <p>Default values can be supplied using:
6355*dc5640d1SHerbert Xue <pre><code>
6356*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6357*dc5640d1SHerbert Xue   protected void configure() {
6358*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6359*dc5640d1SHerbert Xue         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6360*dc5640d1SHerbert Xue   }
6361*dc5640d1SHerbert Xue }</code></pre>
6362*dc5640d1SHerbert Xue With the above module, code can inject an {@code @LookupUrl String} and it
6363*dc5640d1SHerbert Xue will supply the DEFAULT_LOOKUP_URL.  A user can change this value by binding
6364*dc5640d1SHerbert Xue <pre><code>
6365*dc5640d1SHerbert Xue public class UserLookupModule extends AbstractModule {
6366*dc5640d1SHerbert Xue   protected void configure() {
6367*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6368*dc5640d1SHerbert Xue         .setBinding().toInstance(CUSTOM_LOOKUP_URL);
6369*dc5640d1SHerbert Xue   }
6370*dc5640d1SHerbert Xue }</code></pre>
6371*dc5640d1SHerbert Xue ... which will override the default value.
6372*dc5640d1SHerbert Xue
6373*dc5640d1SHerbert Xue <p>If one module uses setDefault the only way to override the default is to use setBinding.
6374*dc5640d1SHerbert Xue It is an error for a user to specify the binding without using OptionalBinder if
6375*dc5640d1SHerbert Xue setDefault or setBinding are called.  For example,
6376*dc5640d1SHerbert Xue <pre><code>
6377*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6378*dc5640d1SHerbert Xue   protected void configure() {
6379*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6380*dc5640d1SHerbert Xue         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6381*dc5640d1SHerbert Xue   }
6382*dc5640d1SHerbert Xue }
6383*dc5640d1SHerbert Xue public class UserLookupModule extends AbstractModule {
6384*dc5640d1SHerbert Xue   protected void configure() {
6385*dc5640d1SHerbert Xue     bind(Key.get(String.class, LookupUrl.class)).toInstance(CUSTOM_LOOKUP_URL);
6386*dc5640d1SHerbert Xue   }
6387*dc5640d1SHerbert Xue }</code></pre>
6388*dc5640d1SHerbert Xue ... would generate an error, because both the framework and the user are trying to bind
6389*dc5640d1SHerbert Xue {@code @LookupUrl String}.
6390*dc5640d1SHerbert Xue
6391*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6392*dc5640d1SHerbert Xue @since 4.0]]>
6393*dc5640d1SHerbert Xue    </doc>
6394*dc5640d1SHerbert Xue  </class>
6395*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.OptionalBinder -->
6396*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.OptionalBinderBinding -->
6397*dc5640d1SHerbert Xue  <interface name="OptionalBinderBinding"    abstract="true"
6398*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6399*dc5640d1SHerbert Xue    deprecated="not deprecated">
6400*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
6401*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6402*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6403*dc5640d1SHerbert Xue      deprecated="not deprecated">
6404*dc5640d1SHerbert Xue      <doc>
6405*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for this binding.]]>
6406*dc5640d1SHerbert Xue      </doc>
6407*dc5640d1SHerbert Xue    </method>
6408*dc5640d1SHerbert Xue    <method name="getDefaultBinding" return="com.google.inject.Binding&lt;?&gt;"
6409*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6410*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6411*dc5640d1SHerbert Xue      deprecated="not deprecated">
6412*dc5640d1SHerbert Xue      <doc>
6413*dc5640d1SHerbert Xue      <![CDATA[Returns the default binding (set by {@link OptionalBinder#setDefault}) if one exists or null
6414*dc5640d1SHerbert Xue if no default binding is set. This will throw {@link UnsupportedOperationException} if it is
6415*dc5640d1SHerbert Xue called on an element retrieved from {@link Elements#getElements}.
6416*dc5640d1SHerbert Xue <p>
6417*dc5640d1SHerbert Xue The Binding's type will always match the type Optional's generic type. For example, if getKey
6418*dc5640d1SHerbert Xue returns a key of <code>Optional&lt;String></code>, then this will always return a
6419*dc5640d1SHerbert Xue <code>Binding&lt;String></code>.]]>
6420*dc5640d1SHerbert Xue      </doc>
6421*dc5640d1SHerbert Xue    </method>
6422*dc5640d1SHerbert Xue    <method name="getActualBinding" return="com.google.inject.Binding&lt;?&gt;"
6423*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6424*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6425*dc5640d1SHerbert Xue      deprecated="not deprecated">
6426*dc5640d1SHerbert Xue      <doc>
6427*dc5640d1SHerbert Xue      <![CDATA[Returns the actual binding (set by {@link OptionalBinder#setBinding}) or null if not set.
6428*dc5640d1SHerbert Xue This will throw {@link UnsupportedOperationException} if it is called on an element retrieved
6429*dc5640d1SHerbert Xue from {@link Elements#getElements}.
6430*dc5640d1SHerbert Xue <p>
6431*dc5640d1SHerbert Xue The Binding's type will always match the type Optional's generic type. For example, if getKey
6432*dc5640d1SHerbert Xue returns a key of <code>Optional&lt;String></code>, then this will always return a
6433*dc5640d1SHerbert Xue <code>Binding&lt;String></code>.]]>
6434*dc5640d1SHerbert Xue      </doc>
6435*dc5640d1SHerbert Xue    </method>
6436*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
6437*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6438*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6439*dc5640d1SHerbert Xue      deprecated="not deprecated">
6440*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
6441*dc5640d1SHerbert Xue      <doc>
6442*dc5640d1SHerbert Xue      <![CDATA[Returns true if this OptionalBinder contains the given Element in order to build the optional
6443*dc5640d1SHerbert Xue binding or uses the given Element in order to support building and injecting its data. This
6444*dc5640d1SHerbert Xue will work for OptionalBinderBinding retrieved from an injector and
6445*dc5640d1SHerbert Xue {@link Elements#getElements}. Usually this is only necessary if you are working with elements
6446*dc5640d1SHerbert Xue retrieved from modules (without an Injector), otherwise {@link #getDefaultBinding} and
6447*dc5640d1SHerbert Xue {@link #getActualBinding} are better options.]]>
6448*dc5640d1SHerbert Xue      </doc>
6449*dc5640d1SHerbert Xue    </method>
6450*dc5640d1SHerbert Xue    <doc>
6451*dc5640d1SHerbert Xue    <![CDATA[A binding for a OptionalBinder.
6452*dc5640d1SHerbert Xue
6453*dc5640d1SHerbert Xue <p>Although OptionalBinders may be injected through a variety of types
6454*dc5640d1SHerbert Xue {@code T}, {@code Optional<T>}, {@code Optional<Provider<T>>}, etc..), an
6455*dc5640d1SHerbert Xue OptionalBinderBinding exists only on the Binding associated with the
6456*dc5640d1SHerbert Xue {@code Optional<T>} key.  Other bindings can be validated to be derived from this
6457*dc5640d1SHerbert Xue OptionalBinderBinding using {@link #containsElement}.
6458*dc5640d1SHerbert Xue
6459*dc5640d1SHerbert Xue @param <T> The fully qualified type of the optional binding, including Optional.
6460*dc5640d1SHerbert Xue        For example: {@code Optional<String>}.
6461*dc5640d1SHerbert Xue
6462*dc5640d1SHerbert Xue @since 4.0
6463*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6464*dc5640d1SHerbert Xue    </doc>
6465*dc5640d1SHerbert Xue  </interface>
6466*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.OptionalBinderBinding -->
6467*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoMap -->
6468*dc5640d1SHerbert Xue  <class name="ProvidesIntoMap"    abstract="true"
6469*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6470*dc5640d1SHerbert Xue    deprecated="not deprecated">
6471*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6472*dc5640d1SHerbert Xue    <doc>
6473*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link MapBinder}.
6474*dc5640d1SHerbert Xue The method's return type, binding annotation and additional key annotation determines
6475*dc5640d1SHerbert Xue what Map this will contribute to. For example,
6476*dc5640d1SHerbert Xue
6477*dc5640d1SHerbert Xue <pre>
6478*dc5640d1SHerbert Xue {@literal @}ProvidesIntoMap
6479*dc5640d1SHerbert Xue {@literal @}StringMapKey("Foo")
6480*dc5640d1SHerbert Xue {@literal @}Named("plugins")
6481*dc5640d1SHerbert Xue Plugin provideFooUrl(FooManager fm) { return fm.getPlugin(); }
6482*dc5640d1SHerbert Xue
6483*dc5640d1SHerbert Xue {@literal @}ProvidesIntoMap
6484*dc5640d1SHerbert Xue {@literal @}StringMapKey("Bar")
6485*dc5640d1SHerbert Xue {@literal @}Named("urls")
6486*dc5640d1SHerbert Xue Plugin provideBarUrl(BarManager bm) { return bm.getPlugin(); }
6487*dc5640d1SHerbert Xue </pre>
6488*dc5640d1SHerbert Xue
6489*dc5640d1SHerbert Xue will add two items to the {@code @Named("urls") Map<String, Plugin>} map. The key 'Foo'
6490*dc5640d1SHerbert Xue will map to the provideFooUrl method, and the key 'Bar' will map to the provideBarUrl method.
6491*dc5640d1SHerbert Xue The values are bound as providers and will be evaluated at injection time.
6492*dc5640d1SHerbert Xue
6493*dc5640d1SHerbert Xue <p>Because the key is specified as an annotation, only Strings, Classes, enums, primitive
6494*dc5640d1SHerbert Xue types and annotation instances are supported as keys.
6495*dc5640d1SHerbert Xue
6496*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6497*dc5640d1SHerbert Xue @since 4.0]]>
6498*dc5640d1SHerbert Xue    </doc>
6499*dc5640d1SHerbert Xue  </class>
6500*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoMap -->
6501*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional -->
6502*dc5640d1SHerbert Xue  <class name="ProvidesIntoOptional"    abstract="true"
6503*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6504*dc5640d1SHerbert Xue    deprecated="not deprecated">
6505*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6506*dc5640d1SHerbert Xue    <doc>
6507*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6508*dc5640d1SHerbert Xue The method's return type and binding annotation determines what Optional this will
6509*dc5640d1SHerbert Xue contribute to. For example,
6510*dc5640d1SHerbert Xue
6511*dc5640d1SHerbert Xue <pre>
6512*dc5640d1SHerbert Xue {@literal @}ProvidesIntoOptional(DEFAULT)
6513*dc5640d1SHerbert Xue {@literal @}Named("url")
6514*dc5640d1SHerbert Xue String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6515*dc5640d1SHerbert Xue
6516*dc5640d1SHerbert Xue {@literal @}ProvidesIntoOptional(ACTUAL)
6517*dc5640d1SHerbert Xue {@literal @}Named("url")
6518*dc5640d1SHerbert Xue String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6519*dc5640d1SHerbert Xue </pre>
6520*dc5640d1SHerbert Xue
6521*dc5640d1SHerbert Xue will set the default value of {@code @Named("url") Optional<String>} to foo's URL,
6522*dc5640d1SHerbert Xue and then override it to bar's URL.
6523*dc5640d1SHerbert Xue
6524*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6525*dc5640d1SHerbert Xue @since 4.0]]>
6526*dc5640d1SHerbert Xue    </doc>
6527*dc5640d1SHerbert Xue  </class>
6528*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional -->
6529*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6530*dc5640d1SHerbert Xue  <class name="ProvidesIntoOptional.Type" extends="java.lang.Enum&lt;com.google.inject.multibindings.ProvidesIntoOptional.Type&gt;"
6531*dc5640d1SHerbert Xue    abstract="false"
6532*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
6533*dc5640d1SHerbert Xue    deprecated="not deprecated">
6534*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.multibindings.ProvidesIntoOptional.Type[]"
6535*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6536*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6537*dc5640d1SHerbert Xue      deprecated="not deprecated">
6538*dc5640d1SHerbert Xue    </method>
6539*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.multibindings.ProvidesIntoOptional.Type"
6540*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6541*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6542*dc5640d1SHerbert Xue      deprecated="not deprecated">
6543*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
6544*dc5640d1SHerbert Xue    </method>
6545*dc5640d1SHerbert Xue    <doc>
6546*dc5640d1SHerbert Xue    <![CDATA[@since 4.0]]>
6547*dc5640d1SHerbert Xue    </doc>
6548*dc5640d1SHerbert Xue  </class>
6549*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6550*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoSet -->
6551*dc5640d1SHerbert Xue  <class name="ProvidesIntoSet"    abstract="true"
6552*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6553*dc5640d1SHerbert Xue    deprecated="not deprecated">
6554*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6555*dc5640d1SHerbert Xue    <doc>
6556*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6557*dc5640d1SHerbert Xue The method's return type and binding annotation determines what Set this will
6558*dc5640d1SHerbert Xue contribute to. For example,
6559*dc5640d1SHerbert Xue
6560*dc5640d1SHerbert Xue <pre>
6561*dc5640d1SHerbert Xue {@literal @}ProvidesIntoSet
6562*dc5640d1SHerbert Xue {@literal @}Named("urls")
6563*dc5640d1SHerbert Xue String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6564*dc5640d1SHerbert Xue
6565*dc5640d1SHerbert Xue {@literal @}ProvidesIntoSet
6566*dc5640d1SHerbert Xue {@literal @}Named("urls")
6567*dc5640d1SHerbert Xue String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6568*dc5640d1SHerbert Xue </pre>
6569*dc5640d1SHerbert Xue
6570*dc5640d1SHerbert Xue will add two items to the {@code @Named("urls") Set<String>} set. The items are bound as
6571*dc5640d1SHerbert Xue providers and will be evaluated at injection time.
6572*dc5640d1SHerbert Xue
6573*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6574*dc5640d1SHerbert Xue @since 4.0]]>
6575*dc5640d1SHerbert Xue    </doc>
6576*dc5640d1SHerbert Xue  </class>
6577*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoSet -->
6578*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.StringMapKey -->
6579*dc5640d1SHerbert Xue  <class name="StringMapKey"    abstract="true"
6580*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6581*dc5640d1SHerbert Xue    deprecated="not deprecated">
6582*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6583*dc5640d1SHerbert Xue    <doc>
6584*dc5640d1SHerbert Xue    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a string map key.
6585*dc5640d1SHerbert Xue
6586*dc5640d1SHerbert Xue @since 4.0]]>
6587*dc5640d1SHerbert Xue    </doc>
6588*dc5640d1SHerbert Xue  </class>
6589*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.StringMapKey -->
6590*dc5640d1SHerbert Xue</package>
6591*dc5640d1SHerbert Xue<package name="com.google.inject.name">
6592*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Named -->
6593*dc5640d1SHerbert Xue  <class name="Named"    abstract="true"
6594*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6595*dc5640d1SHerbert Xue    deprecated="not deprecated">
6596*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6597*dc5640d1SHerbert Xue    <doc>
6598*dc5640d1SHerbert Xue    <![CDATA[Annotates named things.
6599*dc5640d1SHerbert Xue
6600*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6601*dc5640d1SHerbert Xue    </doc>
6602*dc5640d1SHerbert Xue  </class>
6603*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Named -->
6604*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Names -->
6605*dc5640d1SHerbert Xue  <class name="Names" extends="java.lang.Object"
6606*dc5640d1SHerbert Xue    abstract="false"
6607*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6608*dc5640d1SHerbert Xue    deprecated="not deprecated">
6609*dc5640d1SHerbert Xue    <method name="named" return="com.google.inject.name.Named"
6610*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6611*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6612*dc5640d1SHerbert Xue      deprecated="not deprecated">
6613*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
6614*dc5640d1SHerbert Xue      <doc>
6615*dc5640d1SHerbert Xue      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6616*dc5640d1SHerbert Xue      </doc>
6617*dc5640d1SHerbert Xue    </method>
6618*dc5640d1SHerbert Xue    <method name="bindProperties"
6619*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6620*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6621*dc5640d1SHerbert Xue      deprecated="not deprecated">
6622*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6623*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6624*dc5640d1SHerbert Xue      <doc>
6625*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6626*dc5640d1SHerbert Xue {@code properties}.]]>
6627*dc5640d1SHerbert Xue      </doc>
6628*dc5640d1SHerbert Xue    </method>
6629*dc5640d1SHerbert Xue    <method name="bindProperties"
6630*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6631*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6632*dc5640d1SHerbert Xue      deprecated="not deprecated">
6633*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6634*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Properties"/>
6635*dc5640d1SHerbert Xue      <doc>
6636*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6637*dc5640d1SHerbert Xue method binds all properties including those inherited from
6638*dc5640d1SHerbert Xue {@link Properties#defaults defaults}.]]>
6639*dc5640d1SHerbert Xue      </doc>
6640*dc5640d1SHerbert Xue    </method>
6641*dc5640d1SHerbert Xue    <doc>
6642*dc5640d1SHerbert Xue    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6643*dc5640d1SHerbert Xue
6644*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6645*dc5640d1SHerbert Xue    </doc>
6646*dc5640d1SHerbert Xue  </class>
6647*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Names -->
6648*dc5640d1SHerbert Xue</package>
6649*dc5640d1SHerbert Xue<package name="com.google.inject.persist">
6650*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistFilter -->
6651*dc5640d1SHerbert Xue  <class name="PersistFilter" extends="java.lang.Object"
6652*dc5640d1SHerbert Xue    abstract="false"
6653*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6654*dc5640d1SHerbert Xue    deprecated="not deprecated">
6655*dc5640d1SHerbert Xue    <implements name="javax.servlet.Filter"/>
6656*dc5640d1SHerbert Xue    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6657*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6658*dc5640d1SHerbert Xue      deprecated="not deprecated">
6659*dc5640d1SHerbert Xue    </constructor>
6660*dc5640d1SHerbert Xue    <method name="init"
6661*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6662*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6663*dc5640d1SHerbert Xue      deprecated="not deprecated">
6664*dc5640d1SHerbert Xue      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
6665*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
6666*dc5640d1SHerbert Xue    </method>
6667*dc5640d1SHerbert Xue    <method name="destroy"
6668*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6669*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6670*dc5640d1SHerbert Xue      deprecated="not deprecated">
6671*dc5640d1SHerbert Xue    </method>
6672*dc5640d1SHerbert Xue    <method name="doFilter"
6673*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6674*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6675*dc5640d1SHerbert Xue      deprecated="not deprecated">
6676*dc5640d1SHerbert Xue      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
6677*dc5640d1SHerbert Xue      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
6678*dc5640d1SHerbert Xue      <param name="filterChain" type="javax.servlet.FilterChain"/>
6679*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
6680*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
6681*dc5640d1SHerbert Xue    </method>
6682*dc5640d1SHerbert Xue    <doc>
6683*dc5640d1SHerbert Xue    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6684*dc5640d1SHerbert Xue guice-persist manage the lifecycle of active units of work.
6685*dc5640d1SHerbert Xue The filter automatically starts and stops the relevant {@link PersistService}
6686*dc5640d1SHerbert Xue upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6687*dc5640d1SHerbert Xue {@link javax.servlet.Filter#destroy()} respectively.
6688*dc5640d1SHerbert Xue
6689*dc5640d1SHerbert Xue <p> To be able to use the open session-in-view pattern (i.e. work per request),
6690*dc5640d1SHerbert Xue register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6691*dc5640d1SHerbert Xue important that you register this filter before any other filter.
6692*dc5640d1SHerbert Xue
6693*dc5640d1SHerbert Xue For multiple providers, you should register this filter once per provider, inside
6694*dc5640d1SHerbert Xue a private module for each persist module installed (this must be the same private
6695*dc5640d1SHerbert Xue module where the specific persist module is itself installed).
6696*dc5640d1SHerbert Xue
6697*dc5640d1SHerbert Xue <p>
6698*dc5640d1SHerbert Xue Example configuration:
6699*dc5640d1SHerbert Xue <pre>{@code
6700*dc5640d1SHerbert Xue  public class MyModule extends ServletModule {
6701*dc5640d1SHerbert Xue    public void configureServlets() {
6702*dc5640d1SHerbert Xue      filter("/*").through(PersistFilter.class);
6703*dc5640d1SHerbert Xue
6704*dc5640d1SHerbert Xue      serve("/index.html").with(MyHtmlServlet.class);
6705*dc5640d1SHerbert Xue      // Etc.
6706*dc5640d1SHerbert Xue    }
6707*dc5640d1SHerbert Xue  }
6708*dc5640d1SHerbert Xue }</pre>
6709*dc5640d1SHerbert Xue <p>
6710*dc5640d1SHerbert Xue This filter is thread safe and allows you to create injectors concurrently
6711*dc5640d1SHerbert Xue and deploy multiple guice-persist modules within the same injector, or even
6712*dc5640d1SHerbert Xue multiple injectors with persist modules withing the same JVM or web app.
6713*dc5640d1SHerbert Xue <p>
6714*dc5640d1SHerbert Xue This filter requires the Guice Servlet extension.
6715*dc5640d1SHerbert Xue
6716*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6717*dc5640d1SHerbert Xue    </doc>
6718*dc5640d1SHerbert Xue  </class>
6719*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistFilter -->
6720*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistModule -->
6721*dc5640d1SHerbert Xue  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6722*dc5640d1SHerbert Xue    abstract="true"
6723*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6724*dc5640d1SHerbert Xue    deprecated="not deprecated">
6725*dc5640d1SHerbert Xue    <constructor name="PersistModule"
6726*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6727*dc5640d1SHerbert Xue      deprecated="not deprecated">
6728*dc5640d1SHerbert Xue    </constructor>
6729*dc5640d1SHerbert Xue    <method name="configure"
6730*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6731*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6732*dc5640d1SHerbert Xue      deprecated="not deprecated">
6733*dc5640d1SHerbert Xue    </method>
6734*dc5640d1SHerbert Xue    <method name="configurePersistence"
6735*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6736*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6737*dc5640d1SHerbert Xue      deprecated="not deprecated">
6738*dc5640d1SHerbert Xue    </method>
6739*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6740*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6741*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6742*dc5640d1SHerbert Xue      deprecated="not deprecated">
6743*dc5640d1SHerbert Xue    </method>
6744*dc5640d1SHerbert Xue    <doc>
6745*dc5640d1SHerbert Xue    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6746*dc5640d1SHerbert Xue providers.
6747*dc5640d1SHerbert Xue
6748*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6749*dc5640d1SHerbert Xue    </doc>
6750*dc5640d1SHerbert Xue  </class>
6751*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistModule -->
6752*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.PersistService -->
6753*dc5640d1SHerbert Xue  <interface name="PersistService"    abstract="true"
6754*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6755*dc5640d1SHerbert Xue    deprecated="not deprecated">
6756*dc5640d1SHerbert Xue    <method name="start"
6757*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6758*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6759*dc5640d1SHerbert Xue      deprecated="not deprecated">
6760*dc5640d1SHerbert Xue      <doc>
6761*dc5640d1SHerbert Xue      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6762*dc5640d1SHerbert Xue use. For instance, with JPA, it creates an EntityManagerFactory and may
6763*dc5640d1SHerbert Xue open connection pools. This method must be called by your code prior to
6764*dc5640d1SHerbert Xue using any guice-persist or JPA artifacts. If already started,
6765*dc5640d1SHerbert Xue calling this method does nothing, if already stopped, it also does
6766*dc5640d1SHerbert Xue nothing.]]>
6767*dc5640d1SHerbert Xue      </doc>
6768*dc5640d1SHerbert Xue    </method>
6769*dc5640d1SHerbert Xue    <method name="stop"
6770*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6771*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6772*dc5640d1SHerbert Xue      deprecated="not deprecated">
6773*dc5640d1SHerbert Xue      <doc>
6774*dc5640d1SHerbert Xue      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6775*dc5640d1SHerbert Xue closes the {@code EntityManagerFactory}. If already stopped, calling this
6776*dc5640d1SHerbert Xue method does nothing. If not yet started, it also does nothing.]]>
6777*dc5640d1SHerbert Xue      </doc>
6778*dc5640d1SHerbert Xue    </method>
6779*dc5640d1SHerbert Xue    <doc>
6780*dc5640d1SHerbert Xue    <![CDATA[Persistence provider service. Use this to manage the overall
6781*dc5640d1SHerbert Xue startup and stop of the persistence module(s).
6782*dc5640d1SHerbert Xue
6783*dc5640d1SHerbert Xue TODO(dhanji): Integrate with Service API when appropriate.
6784*dc5640d1SHerbert Xue
6785*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6786*dc5640d1SHerbert Xue    </doc>
6787*dc5640d1SHerbert Xue  </interface>
6788*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.PersistService -->
6789*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.Transactional -->
6790*dc5640d1SHerbert Xue  <class name="Transactional"    abstract="true"
6791*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6792*dc5640d1SHerbert Xue    deprecated="not deprecated">
6793*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6794*dc5640d1SHerbert Xue    <doc>
6795*dc5640d1SHerbert Xue    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6796*dc5640d1SHerbert Xue Consult the documentation on https://github.com/google/guice/wiki/GuicePersist for detailed
6797*dc5640d1SHerbert Xue semantics.
6798*dc5640d1SHerbert Xue Marking a method {@code @Transactional} will start a new transaction before the method
6799*dc5640d1SHerbert Xue executes and commit it after the method returns.
6800*dc5640d1SHerbert Xue <p>
6801*dc5640d1SHerbert Xue If the method throws an exception, the transaction will be rolled back <em>unless</em>
6802*dc5640d1SHerbert Xue you have specifically requested not to in the {@link #ignore()} clause.
6803*dc5640d1SHerbert Xue <p>
6804*dc5640d1SHerbert Xue Similarly, the set of exceptions that will trigger a rollback can be defined in
6805*dc5640d1SHerbert Xue the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6806*dc5640d1SHerbert Xue rollback.
6807*dc5640d1SHerbert Xue
6808*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6809*dc5640d1SHerbert Xue    </doc>
6810*dc5640d1SHerbert Xue  </class>
6811*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.Transactional -->
6812*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.UnitOfWork -->
6813*dc5640d1SHerbert Xue  <interface name="UnitOfWork"    abstract="true"
6814*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6815*dc5640d1SHerbert Xue    deprecated="not deprecated">
6816*dc5640d1SHerbert Xue    <method name="begin"
6817*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6818*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6819*dc5640d1SHerbert Xue      deprecated="not deprecated">
6820*dc5640d1SHerbert Xue      <doc>
6821*dc5640d1SHerbert Xue      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6822*dc5640d1SHerbert Xue is already one open, the invocation will do nothing. In this way, you can define arbitrary
6823*dc5640d1SHerbert Xue units-of-work that nest within one another safely.
6824*dc5640d1SHerbert Xue
6825*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6826*dc5640d1SHerbert Xue      </doc>
6827*dc5640d1SHerbert Xue    </method>
6828*dc5640d1SHerbert Xue    <method name="end"
6829*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6830*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6831*dc5640d1SHerbert Xue      deprecated="not deprecated">
6832*dc5640d1SHerbert Xue      <doc>
6833*dc5640d1SHerbert Xue      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6834*dc5640d1SHerbert Xue layer to close. If there is no Unit of work open, then the call returns silently. You can
6835*dc5640d1SHerbert Xue safely invoke end() repeatedly.
6836*dc5640d1SHerbert Xue <p>
6837*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6838*dc5640d1SHerbert Xue      </doc>
6839*dc5640d1SHerbert Xue    </method>
6840*dc5640d1SHerbert Xue    <doc>
6841*dc5640d1SHerbert Xue    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6842*dc5640d1SHerbert Xue work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6843*dc5640d1SHerbert Xue of work is required. Starting and ending a unit of work directly corresponds to opening and
6844*dc5640d1SHerbert Xue closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6845*dc5640d1SHerbert Xue <p> The
6846*dc5640d1SHerbert Xue Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6847*dc5640d1SHerbert Xue end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6848*dc5640d1SHerbert Xue behind thread-locality of Unit of Work semantics).
6849*dc5640d1SHerbert Xue
6850*dc5640d1SHerbert Xue <ul>
6851*dc5640d1SHerbert Xue   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6852*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6853*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6854*dc5640d1SHerbert Xue       background or bootstrap thread) is probably a good use case.</li>
6855*dc5640d1SHerbert Xue  </ul>
6856*dc5640d1SHerbert Xue
6857*dc5640d1SHerbert Xue @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6858*dc5640d1SHerbert Xue    </doc>
6859*dc5640d1SHerbert Xue  </interface>
6860*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.UnitOfWork -->
6861*dc5640d1SHerbert Xue</package>
6862*dc5640d1SHerbert Xue<package name="com.google.inject.persist.finder">
6863*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6864*dc5640d1SHerbert Xue  <class name="DynamicFinder" extends="java.lang.Object"
6865*dc5640d1SHerbert Xue    abstract="false"
6866*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6867*dc5640d1SHerbert Xue    deprecated="not deprecated">
6868*dc5640d1SHerbert Xue    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6870*dc5640d1SHerbert Xue      deprecated="not deprecated">
6871*dc5640d1SHerbert Xue    </constructor>
6872*dc5640d1SHerbert Xue    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6873*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6874*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6875*dc5640d1SHerbert Xue      deprecated="not deprecated">
6876*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
6877*dc5640d1SHerbert Xue      <doc>
6878*dc5640d1SHerbert Xue      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6879*dc5640d1SHerbert Xue
6880*dc5640d1SHerbert Xue @param method a method you want to test as a dynamic finder]]>
6881*dc5640d1SHerbert Xue      </doc>
6882*dc5640d1SHerbert Xue    </method>
6883*dc5640d1SHerbert Xue    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6884*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6885*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6886*dc5640d1SHerbert Xue      deprecated="not deprecated">
6887*dc5640d1SHerbert Xue    </method>
6888*dc5640d1SHerbert Xue    <doc>
6889*dc5640d1SHerbert Xue    <![CDATA[Utility that helps you introspect dynamic finder methods.
6890*dc5640d1SHerbert Xue
6891*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6892*dc5640d1SHerbert Xue    </doc>
6893*dc5640d1SHerbert Xue  </class>
6894*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6895*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.Finder -->
6896*dc5640d1SHerbert Xue  <class name="Finder"    abstract="true"
6897*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6898*dc5640d1SHerbert Xue    deprecated="not deprecated">
6899*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6900*dc5640d1SHerbert Xue    <doc>
6901*dc5640d1SHerbert Xue    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6902*dc5640d1SHerbert Xue specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6903*dc5640d1SHerbert Xue
6904*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6905*dc5640d1SHerbert Xue    </doc>
6906*dc5640d1SHerbert Xue  </class>
6907*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.Finder -->
6908*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.FirstResult -->
6909*dc5640d1SHerbert Xue  <class name="FirstResult"    abstract="true"
6910*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6911*dc5640d1SHerbert Xue    deprecated="not deprecated">
6912*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6913*dc5640d1SHerbert Xue    <doc>
6914*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6915*dc5640d1SHerbert Xue the index of the first result in the result set you are interested in.
6916*dc5640d1SHerbert Xue Useful for paging result sets. Complemented by {@link MaxResults}.
6917*dc5640d1SHerbert Xue
6918*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6919*dc5640d1SHerbert Xue    </doc>
6920*dc5640d1SHerbert Xue  </class>
6921*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.FirstResult -->
6922*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.MaxResults -->
6923*dc5640d1SHerbert Xue  <class name="MaxResults"    abstract="true"
6924*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6925*dc5640d1SHerbert Xue    deprecated="not deprecated">
6926*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6927*dc5640d1SHerbert Xue    <doc>
6928*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6929*dc5640d1SHerbert Xue the maximum size of returned result window. Usefule for paging result sets.
6930*dc5640d1SHerbert Xue Complement of {@link FirstResult}.
6931*dc5640d1SHerbert Xue
6932*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6933*dc5640d1SHerbert Xue    </doc>
6934*dc5640d1SHerbert Xue  </class>
6935*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.MaxResults -->
6936*dc5640d1SHerbert Xue</package>
6937*dc5640d1SHerbert Xue<package name="com.google.inject.persist.jpa">
6938*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6939*dc5640d1SHerbert Xue  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6940*dc5640d1SHerbert Xue    abstract="false"
6941*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6942*dc5640d1SHerbert Xue    deprecated="not deprecated">
6943*dc5640d1SHerbert Xue    <constructor name="JpaPersistModule" type="java.lang.String"
6944*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6945*dc5640d1SHerbert Xue      deprecated="not deprecated">
6946*dc5640d1SHerbert Xue    </constructor>
6947*dc5640d1SHerbert Xue    <method name="configurePersistence"
6948*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6949*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6950*dc5640d1SHerbert Xue      deprecated="not deprecated">
6951*dc5640d1SHerbert Xue    </method>
6952*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6953*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6954*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6955*dc5640d1SHerbert Xue      deprecated="not deprecated">
6956*dc5640d1SHerbert Xue    </method>
6957*dc5640d1SHerbert Xue    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6958*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6959*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6960*dc5640d1SHerbert Xue      deprecated="not deprecated">
6961*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Map&lt;?, ?&gt;"/>
6962*dc5640d1SHerbert Xue      <doc>
6963*dc5640d1SHerbert Xue      <![CDATA[Configures the JPA persistence provider with a set of properties.
6964*dc5640d1SHerbert Xue
6965*dc5640d1SHerbert Xue @param properties A set of name value pairs that configure a JPA persistence
6966*dc5640d1SHerbert Xue     provider as per the specification.
6967*dc5640d1SHerbert Xue @since 4.0 (since 3.0 with a parameter type of {@code java.util.Properties})]]>
6968*dc5640d1SHerbert Xue      </doc>
6969*dc5640d1SHerbert Xue    </method>
6970*dc5640d1SHerbert Xue    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6971*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6972*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6973*dc5640d1SHerbert Xue      deprecated="not deprecated">
6974*dc5640d1SHerbert Xue      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6975*dc5640d1SHerbert Xue      <doc>
6976*dc5640d1SHerbert Xue      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6977*dc5640d1SHerbert Xue
6978*dc5640d1SHerbert Xue @param iface Any interface type whose methods are all dynamic finders.]]>
6979*dc5640d1SHerbert Xue      </doc>
6980*dc5640d1SHerbert Xue    </method>
6981*dc5640d1SHerbert Xue    <doc>
6982*dc5640d1SHerbert Xue    <![CDATA[JPA provider for guice persist.
6983*dc5640d1SHerbert Xue
6984*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6985*dc5640d1SHerbert Xue    </doc>
6986*dc5640d1SHerbert Xue  </class>
6987*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6988*dc5640d1SHerbert Xue</package>
6989*dc5640d1SHerbert Xue<package name="com.google.inject.servlet">
6990*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceFilter -->
6991*dc5640d1SHerbert Xue  <class name="GuiceFilter" extends="java.lang.Object"
6992*dc5640d1SHerbert Xue    abstract="false"
6993*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6994*dc5640d1SHerbert Xue    deprecated="not deprecated">
6995*dc5640d1SHerbert Xue    <implements name="javax.servlet.Filter"/>
6996*dc5640d1SHerbert Xue    <constructor name="GuiceFilter"
6997*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6998*dc5640d1SHerbert Xue      deprecated="not deprecated">
6999*dc5640d1SHerbert Xue    </constructor>
7000*dc5640d1SHerbert Xue    <method name="doFilter"
7001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7002*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7003*dc5640d1SHerbert Xue      deprecated="not deprecated">
7004*dc5640d1SHerbert Xue      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
7005*dc5640d1SHerbert Xue      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
7006*dc5640d1SHerbert Xue      <param name="filterChain" type="javax.servlet.FilterChain"/>
7007*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
7008*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
7009*dc5640d1SHerbert Xue    </method>
7010*dc5640d1SHerbert Xue    <method name="init"
7011*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7012*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7013*dc5640d1SHerbert Xue      deprecated="not deprecated">
7014*dc5640d1SHerbert Xue      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
7015*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
7016*dc5640d1SHerbert Xue    </method>
7017*dc5640d1SHerbert Xue    <method name="destroy"
7018*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7019*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7020*dc5640d1SHerbert Xue      deprecated="not deprecated">
7021*dc5640d1SHerbert Xue    </method>
7022*dc5640d1SHerbert Xue    <doc>
7023*dc5640d1SHerbert Xue    <![CDATA[<p>
7024*dc5640d1SHerbert Xue Apply this filter in web.xml above all other filters (typically), to all requests where you plan
7025*dc5640d1SHerbert Xue  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
7026*dc5640d1SHerbert Xue  and servlets:
7027*dc5640d1SHerbert Xue  <pre>
7028*dc5640d1SHerbert Xue  &lt;filter&gt;
7029*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7030*dc5640d1SHerbert Xue    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
7031*dc5640d1SHerbert Xue  &lt;/filter&gt;
7032*dc5640d1SHerbert Xue
7033*dc5640d1SHerbert Xue  &lt;filter-mapping&gt;
7034*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7035*dc5640d1SHerbert Xue    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
7036*dc5640d1SHerbert Xue  &lt;/filter-mapping&gt;
7037*dc5640d1SHerbert Xue  </pre>
7038*dc5640d1SHerbert Xue
7039*dc5640d1SHerbert Xue This filter must appear before every filter that makes use of Guice injection or servlet
7040*dc5640d1SHerbert Xue scopes functionality. Typically, you will only register this filter in web.xml and register
7041*dc5640d1SHerbert Xue any other filters (and servlets) using a {@link ServletModule}.
7042*dc5640d1SHerbert Xue
7043*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7044*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
7045*dc5640d1SHerbert Xue    </doc>
7046*dc5640d1SHerbert Xue  </class>
7047*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceFilter -->
7048*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
7049*dc5640d1SHerbert Xue  <class name="GuiceServletContextListener" extends="java.lang.Object"
7050*dc5640d1SHerbert Xue    abstract="true"
7051*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7052*dc5640d1SHerbert Xue    deprecated="not deprecated">
7053*dc5640d1SHerbert Xue    <implements name="javax.servlet.ServletContextListener"/>
7054*dc5640d1SHerbert Xue    <constructor name="GuiceServletContextListener"
7055*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7056*dc5640d1SHerbert Xue      deprecated="not deprecated">
7057*dc5640d1SHerbert Xue    </constructor>
7058*dc5640d1SHerbert Xue    <method name="contextInitialized"
7059*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7060*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7061*dc5640d1SHerbert Xue      deprecated="not deprecated">
7062*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7063*dc5640d1SHerbert Xue    </method>
7064*dc5640d1SHerbert Xue    <method name="contextDestroyed"
7065*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7066*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7067*dc5640d1SHerbert Xue      deprecated="not deprecated">
7068*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7069*dc5640d1SHerbert Xue    </method>
7070*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
7071*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7072*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7073*dc5640d1SHerbert Xue      deprecated="not deprecated">
7074*dc5640d1SHerbert Xue      <doc>
7075*dc5640d1SHerbert Xue      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
7076*dc5640d1SHerbert Xue injector.]]>
7077*dc5640d1SHerbert Xue      </doc>
7078*dc5640d1SHerbert Xue    </method>
7079*dc5640d1SHerbert Xue    <doc>
7080*dc5640d1SHerbert Xue    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
7081*dc5640d1SHerbert Xue class as a logical place to create and configure your injector. This will ensure the injector
7082*dc5640d1SHerbert Xue is created when the web application is deployed.
7083*dc5640d1SHerbert Xue
7084*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
7085*dc5640d1SHerbert Xue @since 2.0]]>
7086*dc5640d1SHerbert Xue    </doc>
7087*dc5640d1SHerbert Xue  </class>
7088*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
7089*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
7090*dc5640d1SHerbert Xue  <interface name="InstanceFilterBinding"    abstract="true"
7091*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7092*dc5640d1SHerbert Xue    deprecated="not deprecated">
7093*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7094*dc5640d1SHerbert Xue    <method name="getFilterInstance" return="javax.servlet.Filter"
7095*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7096*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7097*dc5640d1SHerbert Xue      deprecated="not deprecated">
7098*dc5640d1SHerbert Xue      <doc>
7099*dc5640d1SHerbert Xue      <![CDATA[Returns the filter instance that will be used.]]>
7100*dc5640d1SHerbert Xue      </doc>
7101*dc5640d1SHerbert Xue    </method>
7102*dc5640d1SHerbert Xue    <doc>
7103*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a filter.
7104*dc5640d1SHerbert Xue
7105*dc5640d1SHerbert Xue @author [email protected]
7106*dc5640d1SHerbert Xue @since 3.0]]>
7107*dc5640d1SHerbert Xue    </doc>
7108*dc5640d1SHerbert Xue  </interface>
7109*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
7110*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
7111*dc5640d1SHerbert Xue  <interface name="InstanceServletBinding"    abstract="true"
7112*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7113*dc5640d1SHerbert Xue    deprecated="not deprecated">
7114*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7115*dc5640d1SHerbert Xue    <method name="getServletInstance" return="javax.servlet.http.HttpServlet"
7116*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7117*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7118*dc5640d1SHerbert Xue      deprecated="not deprecated">
7119*dc5640d1SHerbert Xue      <doc>
7120*dc5640d1SHerbert Xue      <![CDATA[Returns the servlet instance that will be used.]]>
7121*dc5640d1SHerbert Xue      </doc>
7122*dc5640d1SHerbert Xue    </method>
7123*dc5640d1SHerbert Xue    <doc>
7124*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a servlet.
7125*dc5640d1SHerbert Xue
7126*dc5640d1SHerbert Xue @author [email protected]
7127*dc5640d1SHerbert Xue @since 3.0]]>
7128*dc5640d1SHerbert Xue    </doc>
7129*dc5640d1SHerbert Xue  </interface>
7130*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
7131*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
7132*dc5640d1SHerbert Xue  <interface name="LinkedFilterBinding"    abstract="true"
7133*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7134*dc5640d1SHerbert Xue    deprecated="not deprecated">
7135*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7136*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"
7137*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7138*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7139*dc5640d1SHerbert Xue      deprecated="not deprecated">
7140*dc5640d1SHerbert Xue      <doc>
7141*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the filter instance.]]>
7142*dc5640d1SHerbert Xue      </doc>
7143*dc5640d1SHerbert Xue    </method>
7144*dc5640d1SHerbert Xue    <doc>
7145*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a filter.
7146*dc5640d1SHerbert Xue
7147*dc5640d1SHerbert Xue @author [email protected]
7148*dc5640d1SHerbert Xue @since 3.0]]>
7149*dc5640d1SHerbert Xue    </doc>
7150*dc5640d1SHerbert Xue  </interface>
7151*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
7152*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
7153*dc5640d1SHerbert Xue  <interface name="LinkedServletBinding"    abstract="true"
7154*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7155*dc5640d1SHerbert Xue    deprecated="not deprecated">
7156*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7157*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"
7158*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7159*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7160*dc5640d1SHerbert Xue      deprecated="not deprecated">
7161*dc5640d1SHerbert Xue      <doc>
7162*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the servlet instance.]]>
7163*dc5640d1SHerbert Xue      </doc>
7164*dc5640d1SHerbert Xue    </method>
7165*dc5640d1SHerbert Xue    <doc>
7166*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a servlet.
7167*dc5640d1SHerbert Xue
7168*dc5640d1SHerbert Xue @author [email protected]
7169*dc5640d1SHerbert Xue @since 3.0]]>
7170*dc5640d1SHerbert Xue    </doc>
7171*dc5640d1SHerbert Xue  </interface>
7172*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
7173*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestParameters -->
7174*dc5640d1SHerbert Xue  <class name="RequestParameters"    abstract="true"
7175*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7176*dc5640d1SHerbert Xue    deprecated="not deprecated">
7177*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7178*dc5640d1SHerbert Xue    <doc>
7179*dc5640d1SHerbert Xue    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
7180*dc5640d1SHerbert Xue when you want the HTTP request parameter map to be injected.
7181*dc5640d1SHerbert Xue
7182*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7183*dc5640d1SHerbert Xue    </doc>
7184*dc5640d1SHerbert Xue  </class>
7185*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestParameters -->
7186*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestScoped -->
7187*dc5640d1SHerbert Xue  <class name="RequestScoped"    abstract="true"
7188*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7189*dc5640d1SHerbert Xue    deprecated="not deprecated">
7190*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7191*dc5640d1SHerbert Xue    <doc>
7192*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per request.
7193*dc5640d1SHerbert Xue
7194*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7195*dc5640d1SHerbert Xue    </doc>
7196*dc5640d1SHerbert Xue  </class>
7197*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestScoped -->
7198*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.RequestScoper -->
7199*dc5640d1SHerbert Xue  <interface name="RequestScoper"    abstract="true"
7200*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7201*dc5640d1SHerbert Xue    deprecated="not deprecated">
7202*dc5640d1SHerbert Xue    <method name="open" return="com.google.inject.servlet.RequestScoper.CloseableScope"
7203*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7204*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7205*dc5640d1SHerbert Xue      deprecated="not deprecated">
7206*dc5640d1SHerbert Xue      <doc>
7207*dc5640d1SHerbert Xue      <![CDATA[Opens up the request scope until the returned object is closed.
7208*dc5640d1SHerbert Xue Implementations should ensure (e.g. by blocking) that multiple threads
7209*dc5640d1SHerbert Xue cannot open the same request scope concurrently. It is allowable to open
7210*dc5640d1SHerbert Xue the same request scope on the same thread, as long as open/close calls are
7211*dc5640d1SHerbert Xue correctly nested.]]>
7212*dc5640d1SHerbert Xue      </doc>
7213*dc5640d1SHerbert Xue    </method>
7214*dc5640d1SHerbert Xue    <doc>
7215*dc5640d1SHerbert Xue    <![CDATA[Object that can be used to apply a request scope to a block of code.]]>
7216*dc5640d1SHerbert Xue    </doc>
7217*dc5640d1SHerbert Xue  </interface>
7218*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.RequestScoper -->
7219*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.RequestScoper.CloseableScope -->
7220*dc5640d1SHerbert Xue  <interface name="RequestScoper.CloseableScope"    abstract="true"
7221*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7222*dc5640d1SHerbert Xue    deprecated="not deprecated">
7223*dc5640d1SHerbert Xue    <implements name="java.io.Closeable"/>
7224*dc5640d1SHerbert Xue    <method name="close"
7225*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7226*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7227*dc5640d1SHerbert Xue      deprecated="not deprecated">
7228*dc5640d1SHerbert Xue    </method>
7229*dc5640d1SHerbert Xue    <doc>
7230*dc5640d1SHerbert Xue    <![CDATA[Closeable subclass that does not throw any exceptions from close.]]>
7231*dc5640d1SHerbert Xue    </doc>
7232*dc5640d1SHerbert Xue  </interface>
7233*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.RequestScoper.CloseableScope -->
7234*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ScopingException -->
7235*dc5640d1SHerbert Xue  <class name="ScopingException" extends="java.lang.IllegalStateException"
7236*dc5640d1SHerbert Xue    abstract="false"
7237*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7238*dc5640d1SHerbert Xue    deprecated="not deprecated">
7239*dc5640d1SHerbert Xue    <constructor name="ScopingException" type="java.lang.String"
7240*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7241*dc5640d1SHerbert Xue      deprecated="not deprecated">
7242*dc5640d1SHerbert Xue    </constructor>
7243*dc5640d1SHerbert Xue    <doc>
7244*dc5640d1SHerbert Xue    <![CDATA[Exception thrown when there was a failure entering request scope.
7245*dc5640d1SHerbert Xue
7246*dc5640d1SHerbert Xue @author Chris Nokleberg
7247*dc5640d1SHerbert Xue @since 4.0]]>
7248*dc5640d1SHerbert Xue    </doc>
7249*dc5640d1SHerbert Xue  </class>
7250*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ScopingException -->
7251*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ScopingOnly -->
7252*dc5640d1SHerbert Xue  <class name="ScopingOnly"    abstract="true"
7253*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7254*dc5640d1SHerbert Xue    deprecated="not deprecated">
7255*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7256*dc5640d1SHerbert Xue    <doc>
7257*dc5640d1SHerbert Xue    <![CDATA[Annotates a {@link GuiceFilter} that provides scope functionality, but
7258*dc5640d1SHerbert Xue doesn't dispatch to {@link ServletModule} bound servlets or filters.
7259*dc5640d1SHerbert Xue
7260*dc5640d1SHerbert Xue @author [email protected] (Isaac Shum)
7261*dc5640d1SHerbert Xue @since 4.0]]>
7262*dc5640d1SHerbert Xue    </doc>
7263*dc5640d1SHerbert Xue  </class>
7264*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ScopingOnly -->
7265*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletModule -->
7266*dc5640d1SHerbert Xue  <class name="ServletModule" extends="com.google.inject.AbstractModule"
7267*dc5640d1SHerbert Xue    abstract="false"
7268*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7269*dc5640d1SHerbert Xue    deprecated="not deprecated">
7270*dc5640d1SHerbert Xue    <constructor name="ServletModule"
7271*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7272*dc5640d1SHerbert Xue      deprecated="not deprecated">
7273*dc5640d1SHerbert Xue    </constructor>
7274*dc5640d1SHerbert Xue    <method name="configure"
7275*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7276*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7277*dc5640d1SHerbert Xue      deprecated="not deprecated">
7278*dc5640d1SHerbert Xue    </method>
7279*dc5640d1SHerbert Xue    <method name="configureServlets"
7280*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7281*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7282*dc5640d1SHerbert Xue      deprecated="not deprecated">
7283*dc5640d1SHerbert Xue      <doc>
7284*dc5640d1SHerbert Xue      <![CDATA[<h3>Servlet Mapping EDSL</h3>
7285*dc5640d1SHerbert Xue
7286*dc5640d1SHerbert Xue <p> Part of the EDSL builder language for configuring servlets
7287*dc5640d1SHerbert Xue and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
7288*dc5640d1SHerbert Xue Filters and servlets are configured here using simple java method calls. Here is a typical
7289*dc5640d1SHerbert Xue example of registering a filter when creating your Guice injector:
7290*dc5640d1SHerbert Xue
7291*dc5640d1SHerbert Xue <pre>
7292*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
7293*dc5640d1SHerbert Xue
7294*dc5640d1SHerbert Xue     {@literal @}Override
7295*dc5640d1SHerbert Xue     protected void configureServlets() {
7296*dc5640d1SHerbert Xue       <b>serve("*.html").with(MyServlet.class)</b>
7297*dc5640d1SHerbert Xue     }
7298*dc5640d1SHerbert Xue   }
7299*dc5640d1SHerbert Xue </pre>
7300*dc5640d1SHerbert Xue
7301*dc5640d1SHerbert Xue This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
7302*dc5640d1SHerbert Xue any web pages ending in {@code .html}. You can also use a path-style syntax to register
7303*dc5640d1SHerbert Xue servlets:
7304*dc5640d1SHerbert Xue
7305*dc5640d1SHerbert Xue <pre>
7306*dc5640d1SHerbert Xue       <b>serve("/my/*").with(MyServlet.class)</b>
7307*dc5640d1SHerbert Xue </pre>
7308*dc5640d1SHerbert Xue
7309*dc5640d1SHerbert Xue Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
7310*dc5640d1SHerbert Xue directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
7311*dc5640d1SHerbert Xue your module. Mapping a servlet that is bound under any other scope is an error.
7312*dc5640d1SHerbert Xue
7313*dc5640d1SHerbert Xue <p>
7314*dc5640d1SHerbert Xue <h4>Dispatch Order</h4>
7315*dc5640d1SHerbert Xue You are free to register as many servlets and filters as you like this way. They will
7316*dc5640d1SHerbert Xue be compared and dispatched in the order in which the filter methods are called:
7317*dc5640d1SHerbert Xue
7318*dc5640d1SHerbert Xue <pre>
7319*dc5640d1SHerbert Xue
7320*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
7321*dc5640d1SHerbert Xue
7322*dc5640d1SHerbert Xue     {@literal @}Override
7323*dc5640d1SHerbert Xue     protected void configureServlets() {
7324*dc5640d1SHerbert Xue       filter("/*").through(MyFilter.class);
7325*dc5640d1SHerbert Xue       filter("*.css").through(MyCssFilter.class);
7326*dc5640d1SHerbert Xue       filter("*.jpg").through(new MyJpgFilter());
7327*dc5640d1SHerbert Xue       // etc..
7328*dc5640d1SHerbert Xue
7329*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
7330*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
7331*dc5640d1SHerbert Xue       serve("*.jpg").with(new MyServlet());
7332*dc5640d1SHerbert Xue       // etc..
7333*dc5640d1SHerbert Xue      }
7334*dc5640d1SHerbert Xue    }
7335*dc5640d1SHerbert Xue </pre>
7336*dc5640d1SHerbert Xue This will traverse down the list of rules in lexical order. For example, a url
7337*dc5640d1SHerbert Xue  "{@code /my/file.js}" (after it runs through the matching filters) will first
7338*dc5640d1SHerbert Xue  be compared against the servlet mapping:
7339*dc5640d1SHerbert Xue
7340*dc5640d1SHerbert Xue <pre>
7341*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
7342*dc5640d1SHerbert Xue </pre>
7343*dc5640d1SHerbert Xue And failing that, it will descend to the next servlet mapping:
7344*dc5640d1SHerbert Xue
7345*dc5640d1SHerbert Xue <pre>
7346*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
7347*dc5640d1SHerbert Xue </pre>
7348*dc5640d1SHerbert Xue
7349*dc5640d1SHerbert Xue Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
7350*dc5640d1SHerbert Xue two mapping rules can also be written in more compact form using varargs syntax:
7351*dc5640d1SHerbert Xue
7352*dc5640d1SHerbert Xue <pre>
7353*dc5640d1SHerbert Xue       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
7354*dc5640d1SHerbert Xue </pre>
7355*dc5640d1SHerbert Xue
7356*dc5640d1SHerbert Xue This way you can map several URI patterns to the same servlet. A similar syntax is
7357*dc5640d1SHerbert Xue also available for filter mappings.
7358*dc5640d1SHerbert Xue
7359*dc5640d1SHerbert Xue <p>
7360*dc5640d1SHerbert Xue <h4>Regular Expressions</h4>
7361*dc5640d1SHerbert Xue You can also map servlets (or filters) to URIs using regular expressions:
7362*dc5640d1SHerbert Xue <pre>
7363*dc5640d1SHerbert Xue    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
7364*dc5640d1SHerbert Xue </pre>
7365*dc5640d1SHerbert Xue
7366*dc5640d1SHerbert Xue This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
7367*dc5640d1SHerbert Xue <ul>
7368*dc5640d1SHerbert Xue <li>http://www.google.com/ajax.html</li>
7369*dc5640d1SHerbert Xue <li>http://www.google.com/content/ajax/index</li>
7370*dc5640d1SHerbert Xue <li>http://www.google.com/it/is_totally_ajaxian</li>
7371*dc5640d1SHerbert Xue </ul>
7372*dc5640d1SHerbert Xue
7373*dc5640d1SHerbert Xue
7374*dc5640d1SHerbert Xue <h3>Initialization Parameters</h3>
7375*dc5640d1SHerbert Xue
7376*dc5640d1SHerbert Xue Servlets (and filters) allow you to pass in init params
7377*dc5640d1SHerbert Xue using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
7378*dc5640d1SHerbert Xue Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
7379*dc5640d1SHerbert Xue name/value pairs. For example, to initialize {@code MyServlet} with two parameters
7380*dc5640d1SHerbert Xue ({@code name="Dhanji", site="google.com"}) you could write:
7381*dc5640d1SHerbert Xue
7382*dc5640d1SHerbert Xue <pre>
7383*dc5640d1SHerbert Xue  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
7384*dc5640d1SHerbert Xue  params.put("name", "Dhanji");
7385*dc5640d1SHerbert Xue  params.put("site", "google.com");
7386*dc5640d1SHerbert Xue
7387*dc5640d1SHerbert Xue  ...
7388*dc5640d1SHerbert Xue      serve("/*").with(MyServlet.class, <b>params</b>)
7389*dc5640d1SHerbert Xue </pre>
7390*dc5640d1SHerbert Xue
7391*dc5640d1SHerbert Xue <p>
7392*dc5640d1SHerbert Xue <h3>Binding Keys</h3>
7393*dc5640d1SHerbert Xue
7394*dc5640d1SHerbert Xue You can also bind keys rather than classes. This lets you hide
7395*dc5640d1SHerbert Xue implementations with package-local visbility and expose them using
7396*dc5640d1SHerbert Xue only a Guice module and an annotation:
7397*dc5640d1SHerbert Xue
7398*dc5640d1SHerbert Xue <pre>
7399*dc5640d1SHerbert Xue  ...
7400*dc5640d1SHerbert Xue      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
7401*dc5640d1SHerbert Xue </pre>
7402*dc5640d1SHerbert Xue
7403*dc5640d1SHerbert Xue Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
7404*dc5640d1SHerbert Xue custom binding annotation. Elsewhere (in one of your own modules) you can bind this
7405*dc5640d1SHerbert Xue filter's implementation:
7406*dc5640d1SHerbert Xue
7407*dc5640d1SHerbert Xue <pre>
7408*dc5640d1SHerbert Xue   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
7409*dc5640d1SHerbert Xue </pre>
7410*dc5640d1SHerbert Xue
7411*dc5640d1SHerbert Xue See {@link com.google.inject.Binder} for more information on binding syntax.
7412*dc5640d1SHerbert Xue
7413*dc5640d1SHerbert Xue <p>
7414*dc5640d1SHerbert Xue <h3>Multiple Modules</h3>
7415*dc5640d1SHerbert Xue
7416*dc5640d1SHerbert Xue It is sometimes useful to capture servlet and filter mappings from multiple different
7417*dc5640d1SHerbert Xue modules. This is essential if you want to package and offer drop-in Guice plugins that
7418*dc5640d1SHerbert Xue provide servlet functionality.
7419*dc5640d1SHerbert Xue
7420*dc5640d1SHerbert Xue <p>
7421*dc5640d1SHerbert Xue Guice Servlet allows you to register several instances of {@code ServletModule} to your
7422*dc5640d1SHerbert Xue injector. The order in which these modules are installed determines the dispatch order
7423*dc5640d1SHerbert Xue of filters and the precedence order of servlets. For example, if you had two servlet modules,
7424*dc5640d1SHerbert Xue {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
7425*dc5640d1SHerbert Xue to the same URI pattern, {@code "/*"}:
7426*dc5640d1SHerbert Xue
7427*dc5640d1SHerbert Xue <p>
7428*dc5640d1SHerbert Xue In {@code RpcModule}:
7429*dc5640d1SHerbert Xue <pre>
7430*dc5640d1SHerbert Xue     filter("/*").through(RpcFilter.class);
7431*dc5640d1SHerbert Xue </pre>
7432*dc5640d1SHerbert Xue
7433*dc5640d1SHerbert Xue In {@code WebServiceModule}:
7434*dc5640d1SHerbert Xue <pre>
7435*dc5640d1SHerbert Xue     filter("/*").through(WebServiceFilter.class);
7436*dc5640d1SHerbert Xue </pre>
7437*dc5640d1SHerbert Xue
7438*dc5640d1SHerbert Xue Then the order in which these filters are dispatched is determined by the order in which
7439*dc5640d1SHerbert Xue the modules are installed:
7440*dc5640d1SHerbert Xue
7441*dc5640d1SHerbert Xue <pre>
7442*dc5640d1SHerbert Xue   <b>install(new WebServiceModule());</b>
7443*dc5640d1SHerbert Xue   install(new RpcModule());
7444*dc5640d1SHerbert Xue </pre>
7445*dc5640d1SHerbert Xue
7446*dc5640d1SHerbert Xue In the case shown above {@code WebServiceFilter} will run first.
7447*dc5640d1SHerbert Xue
7448*dc5640d1SHerbert Xue @since 2.0]]>
7449*dc5640d1SHerbert Xue      </doc>
7450*dc5640d1SHerbert Xue    </method>
7451*dc5640d1SHerbert Xue    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7452*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7453*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7454*dc5640d1SHerbert Xue      deprecated="not deprecated">
7455*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
7456*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
7457*dc5640d1SHerbert Xue      <doc>
7458*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7459*dc5640d1SHerbert Xue @since 2.0]]>
7460*dc5640d1SHerbert Xue      </doc>
7461*dc5640d1SHerbert Xue    </method>
7462*dc5640d1SHerbert Xue    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7463*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7464*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7465*dc5640d1SHerbert Xue      deprecated="not deprecated">
7466*dc5640d1SHerbert Xue      <param name="urlPatterns" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7467*dc5640d1SHerbert Xue      <doc>
7468*dc5640d1SHerbert Xue      <![CDATA[@param urlPatterns Any Servlet-style patterns. examples: /*, /html/*, *.html, etc.
7469*dc5640d1SHerbert Xue @since 4.1]]>
7470*dc5640d1SHerbert Xue      </doc>
7471*dc5640d1SHerbert Xue    </method>
7472*dc5640d1SHerbert Xue    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7473*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7474*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7475*dc5640d1SHerbert Xue      deprecated="not deprecated">
7476*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
7477*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
7478*dc5640d1SHerbert Xue      <doc>
7479*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
7480*dc5640d1SHerbert Xue @since 2.0]]>
7481*dc5640d1SHerbert Xue      </doc>
7482*dc5640d1SHerbert Xue    </method>
7483*dc5640d1SHerbert Xue    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7484*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7485*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7486*dc5640d1SHerbert Xue      deprecated="not deprecated">
7487*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7488*dc5640d1SHerbert Xue      <doc>
7489*dc5640d1SHerbert Xue      <![CDATA[@param regexes Any Java-style regular expressions.
7490*dc5640d1SHerbert Xue @since 4.1]]>
7491*dc5640d1SHerbert Xue      </doc>
7492*dc5640d1SHerbert Xue    </method>
7493*dc5640d1SHerbert Xue    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7494*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7495*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7496*dc5640d1SHerbert Xue      deprecated="not deprecated">
7497*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
7498*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
7499*dc5640d1SHerbert Xue      <doc>
7500*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7501*dc5640d1SHerbert Xue @since 2.0]]>
7502*dc5640d1SHerbert Xue      </doc>
7503*dc5640d1SHerbert Xue    </method>
7504*dc5640d1SHerbert Xue    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7505*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7506*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7507*dc5640d1SHerbert Xue      deprecated="not deprecated">
7508*dc5640d1SHerbert Xue      <param name="urlPatterns" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7509*dc5640d1SHerbert Xue      <doc>
7510*dc5640d1SHerbert Xue      <![CDATA[@param urlPatterns Any Servlet-style patterns. examples: /*, /html/*, *.html, etc.
7511*dc5640d1SHerbert Xue @since 4.1]]>
7512*dc5640d1SHerbert Xue      </doc>
7513*dc5640d1SHerbert Xue    </method>
7514*dc5640d1SHerbert Xue    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7515*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7516*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7517*dc5640d1SHerbert Xue      deprecated="not deprecated">
7518*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
7519*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
7520*dc5640d1SHerbert Xue      <doc>
7521*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
7522*dc5640d1SHerbert Xue @since 2.0]]>
7523*dc5640d1SHerbert Xue      </doc>
7524*dc5640d1SHerbert Xue    </method>
7525*dc5640d1SHerbert Xue    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7526*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7527*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7528*dc5640d1SHerbert Xue      deprecated="not deprecated">
7529*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.Iterable&lt;java.lang.String&gt;"/>
7530*dc5640d1SHerbert Xue      <doc>
7531*dc5640d1SHerbert Xue      <![CDATA[@param regexes Any Java-style regular expressions.
7532*dc5640d1SHerbert Xue @since 4.1]]>
7533*dc5640d1SHerbert Xue      </doc>
7534*dc5640d1SHerbert Xue    </method>
7535*dc5640d1SHerbert Xue    <method name="getServletContext" return="javax.servlet.ServletContext"
7536*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7537*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7538*dc5640d1SHerbert Xue      deprecated="not deprecated">
7539*dc5640d1SHerbert Xue      <doc>
7540*dc5640d1SHerbert Xue      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
7541*dc5640d1SHerbert Xue create your injector. Otherwise, it returns null.
7542*dc5640d1SHerbert Xue @return The current servlet context.
7543*dc5640d1SHerbert Xue @since 3.0]]>
7544*dc5640d1SHerbert Xue      </doc>
7545*dc5640d1SHerbert Xue    </method>
7546*dc5640d1SHerbert Xue    <doc>
7547*dc5640d1SHerbert Xue    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
7548*dc5640d1SHerbert Xue objects so you can inject the request, response, session, etc.
7549*dc5640d1SHerbert Xue
7550*dc5640d1SHerbert Xue <p>
7551*dc5640d1SHerbert Xue You should subclass this module to register servlets and
7552*dc5640d1SHerbert Xue filters in the {@link #configureServlets()} method.
7553*dc5640d1SHerbert Xue
7554*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7555*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
7556*dc5640d1SHerbert Xue    </doc>
7557*dc5640d1SHerbert Xue  </class>
7558*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletModule -->
7559*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7560*dc5640d1SHerbert Xue  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
7561*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7562*dc5640d1SHerbert Xue    deprecated="not deprecated">
7563*dc5640d1SHerbert Xue    <method name="through"
7564*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7565*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7566*dc5640d1SHerbert Xue      deprecated="not deprecated">
7567*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7568*dc5640d1SHerbert Xue    </method>
7569*dc5640d1SHerbert Xue    <method name="through"
7570*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7571*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7572*dc5640d1SHerbert Xue      deprecated="not deprecated">
7573*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7574*dc5640d1SHerbert Xue    </method>
7575*dc5640d1SHerbert Xue    <method name="through"
7576*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7577*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7578*dc5640d1SHerbert Xue      deprecated="not deprecated">
7579*dc5640d1SHerbert Xue      <param name="filter" type="javax.servlet.Filter"/>
7580*dc5640d1SHerbert Xue      <doc>
7581*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7582*dc5640d1SHerbert Xue      </doc>
7583*dc5640d1SHerbert Xue    </method>
7584*dc5640d1SHerbert Xue    <method name="through"
7585*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7586*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7587*dc5640d1SHerbert Xue      deprecated="not deprecated">
7588*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7589*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7590*dc5640d1SHerbert Xue    </method>
7591*dc5640d1SHerbert Xue    <method name="through"
7592*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7593*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7594*dc5640d1SHerbert Xue      deprecated="not deprecated">
7595*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7596*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7597*dc5640d1SHerbert Xue    </method>
7598*dc5640d1SHerbert Xue    <method name="through"
7599*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7600*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7601*dc5640d1SHerbert Xue      deprecated="not deprecated">
7602*dc5640d1SHerbert Xue      <param name="filter" type="javax.servlet.Filter"/>
7603*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7604*dc5640d1SHerbert Xue      <doc>
7605*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7606*dc5640d1SHerbert Xue      </doc>
7607*dc5640d1SHerbert Xue    </method>
7608*dc5640d1SHerbert Xue    <doc>
7609*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7610*dc5640d1SHerbert Xue
7611*dc5640d1SHerbert Xue @since 2.0]]>
7612*dc5640d1SHerbert Xue    </doc>
7613*dc5640d1SHerbert Xue  </interface>
7614*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7615*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7616*dc5640d1SHerbert Xue  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7617*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7618*dc5640d1SHerbert Xue    deprecated="not deprecated">
7619*dc5640d1SHerbert Xue    <method name="with"
7620*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7621*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7622*dc5640d1SHerbert Xue      deprecated="not deprecated">
7623*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7624*dc5640d1SHerbert Xue    </method>
7625*dc5640d1SHerbert Xue    <method name="with"
7626*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7627*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7628*dc5640d1SHerbert Xue      deprecated="not deprecated">
7629*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7630*dc5640d1SHerbert Xue    </method>
7631*dc5640d1SHerbert Xue    <method name="with"
7632*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7633*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7634*dc5640d1SHerbert Xue      deprecated="not deprecated">
7635*dc5640d1SHerbert Xue      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7636*dc5640d1SHerbert Xue      <doc>
7637*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7638*dc5640d1SHerbert Xue      </doc>
7639*dc5640d1SHerbert Xue    </method>
7640*dc5640d1SHerbert Xue    <method name="with"
7641*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7642*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7643*dc5640d1SHerbert Xue      deprecated="not deprecated">
7644*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7645*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7646*dc5640d1SHerbert Xue    </method>
7647*dc5640d1SHerbert Xue    <method name="with"
7648*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7649*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7650*dc5640d1SHerbert Xue      deprecated="not deprecated">
7651*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7652*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7653*dc5640d1SHerbert Xue    </method>
7654*dc5640d1SHerbert Xue    <method name="with"
7655*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7656*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7657*dc5640d1SHerbert Xue      deprecated="not deprecated">
7658*dc5640d1SHerbert Xue      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7659*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7660*dc5640d1SHerbert Xue      <doc>
7661*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7662*dc5640d1SHerbert Xue      </doc>
7663*dc5640d1SHerbert Xue    </method>
7664*dc5640d1SHerbert Xue    <doc>
7665*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7666*dc5640d1SHerbert Xue
7667*dc5640d1SHerbert Xue @since 2.0]]>
7668*dc5640d1SHerbert Xue    </doc>
7669*dc5640d1SHerbert Xue  </interface>
7670*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7671*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7672*dc5640d1SHerbert Xue  <interface name="ServletModuleBinding"    abstract="true"
7673*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7674*dc5640d1SHerbert Xue    deprecated="not deprecated">
7675*dc5640d1SHerbert Xue    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7676*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7677*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7678*dc5640d1SHerbert Xue      deprecated="not deprecated">
7679*dc5640d1SHerbert Xue      <doc>
7680*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern type that this binding was created with.]]>
7681*dc5640d1SHerbert Xue      </doc>
7682*dc5640d1SHerbert Xue    </method>
7683*dc5640d1SHerbert Xue    <method name="getPattern" return="java.lang.String"
7684*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7685*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7686*dc5640d1SHerbert Xue      deprecated="not deprecated">
7687*dc5640d1SHerbert Xue      <doc>
7688*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern used to match against the binding.]]>
7689*dc5640d1SHerbert Xue      </doc>
7690*dc5640d1SHerbert Xue    </method>
7691*dc5640d1SHerbert Xue    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7692*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7693*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7694*dc5640d1SHerbert Xue      deprecated="not deprecated">
7695*dc5640d1SHerbert Xue      <doc>
7696*dc5640d1SHerbert Xue      <![CDATA[Returns any context params supplied when creating the binding.]]>
7697*dc5640d1SHerbert Xue      </doc>
7698*dc5640d1SHerbert Xue    </method>
7699*dc5640d1SHerbert Xue    <method name="matchesUri" return="boolean"
7700*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7701*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7702*dc5640d1SHerbert Xue      deprecated="not deprecated">
7703*dc5640d1SHerbert Xue      <param name="uri" type="java.lang.String"/>
7704*dc5640d1SHerbert Xue      <doc>
7705*dc5640d1SHerbert Xue      <![CDATA[Returns true if the given URI will match this binding.]]>
7706*dc5640d1SHerbert Xue      </doc>
7707*dc5640d1SHerbert Xue    </method>
7708*dc5640d1SHerbert Xue    <doc>
7709*dc5640d1SHerbert Xue    <![CDATA[A binding created by {@link ServletModule}.
7710*dc5640d1SHerbert Xue
7711*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
7712*dc5640d1SHerbert Xue @since 3.0]]>
7713*dc5640d1SHerbert Xue    </doc>
7714*dc5640d1SHerbert Xue  </interface>
7715*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7716*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7717*dc5640d1SHerbert Xue  <interface name="ServletModuleTargetVisitor"    abstract="true"
7718*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7719*dc5640d1SHerbert Xue    deprecated="not deprecated">
7720*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7721*dc5640d1SHerbert Xue    <method name="visit" return="V"
7722*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7723*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7724*dc5640d1SHerbert Xue      deprecated="not deprecated">
7725*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7726*dc5640d1SHerbert Xue      <doc>
7727*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7728*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7729*dc5640d1SHerbert Xue
7730*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7731*dc5640d1SHerbert Xue      </doc>
7732*dc5640d1SHerbert Xue    </method>
7733*dc5640d1SHerbert Xue    <method name="visit" return="V"
7734*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7735*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7736*dc5640d1SHerbert Xue      deprecated="not deprecated">
7737*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7738*dc5640d1SHerbert Xue      <doc>
7739*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7740*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7741*dc5640d1SHerbert Xue
7742*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7743*dc5640d1SHerbert Xue      </doc>
7744*dc5640d1SHerbert Xue    </method>
7745*dc5640d1SHerbert Xue    <method name="visit" return="V"
7746*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7747*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7748*dc5640d1SHerbert Xue      deprecated="not deprecated">
7749*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7750*dc5640d1SHerbert Xue      <doc>
7751*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7752*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7753*dc5640d1SHerbert Xue
7754*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7755*dc5640d1SHerbert Xue      </doc>
7756*dc5640d1SHerbert Xue    </method>
7757*dc5640d1SHerbert Xue    <method name="visit" return="V"
7758*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7759*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7760*dc5640d1SHerbert Xue      deprecated="not deprecated">
7761*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7762*dc5640d1SHerbert Xue      <doc>
7763*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7764*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7765*dc5640d1SHerbert Xue
7766*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7767*dc5640d1SHerbert Xue      </doc>
7768*dc5640d1SHerbert Xue    </method>
7769*dc5640d1SHerbert Xue    <doc>
7770*dc5640d1SHerbert Xue    <![CDATA[A visitor for the servlet extension.
7771*dc5640d1SHerbert Xue
7772*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7773*dc5640d1SHerbert Xue {@link ServletModule} will be visited through this interface.
7774*dc5640d1SHerbert Xue
7775*dc5640d1SHerbert Xue @since 3.0
7776*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
7777*dc5640d1SHerbert Xue    </doc>
7778*dc5640d1SHerbert Xue  </interface>
7779*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7780*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletScopes -->
7781*dc5640d1SHerbert Xue  <class name="ServletScopes" extends="java.lang.Object"
7782*dc5640d1SHerbert Xue    abstract="false"
7783*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7784*dc5640d1SHerbert Xue    deprecated="not deprecated">
7785*dc5640d1SHerbert Xue    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7786*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7787*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7788*dc5640d1SHerbert Xue      deprecated="You probably want to use {@code transferRequest} instead">
7789*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7790*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7791*dc5640d1SHerbert Xue      <doc>
7792*dc5640d1SHerbert Xue      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7793*dc5640d1SHerbert Xue HTTP request in another thread. This acts as a way of transporting
7794*dc5640d1SHerbert Xue request context data from the request processing thread to to worker
7795*dc5640d1SHerbert Xue threads.
7796*dc5640d1SHerbert Xue <p>
7797*dc5640d1SHerbert Xue There are some limitations:
7798*dc5640d1SHerbert Xue <ul>
7799*dc5640d1SHerbert Xue   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7800*dc5640d1SHerbert Xue      transported.</li>
7801*dc5640d1SHerbert Xue   <li>State changes to the HttpServletRequest after this method is called
7802*dc5640d1SHerbert Xue      will not be seen in the continued thread.</li>
7803*dc5640d1SHerbert Xue   <li>Only the HttpServletRequest, ServletContext and request parameter
7804*dc5640d1SHerbert Xue      map are available in the continued thread. The response and session
7805*dc5640d1SHerbert Xue      are not available.</li>
7806*dc5640d1SHerbert Xue </ul>
7807*dc5640d1SHerbert Xue
7808*dc5640d1SHerbert Xue <p>The returned callable will throw a {@link ScopingException} when called
7809*dc5640d1SHerbert Xue if the HTTP request scope is still active on the current thread.
7810*dc5640d1SHerbert Xue
7811*dc5640d1SHerbert Xue @param callable code to be executed in another thread, which depends on
7812*dc5640d1SHerbert Xue     the request scope.
7813*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7814*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7815*dc5640d1SHerbert Xue     the value.
7816*dc5640d1SHerbert Xue @return a callable that will invoke the given callable, making the request
7817*dc5640d1SHerbert Xue     context available to it.
7818*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7819*dc5640d1SHerbert Xue     thread, or if the request has completed.
7820*dc5640d1SHerbert Xue
7821*dc5640d1SHerbert Xue @since 3.0
7822*dc5640d1SHerbert Xue @deprecated You probably want to use {@code transferRequest} instead]]>
7823*dc5640d1SHerbert Xue      </doc>
7824*dc5640d1SHerbert Xue    </method>
7825*dc5640d1SHerbert Xue    <method name="transferRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7826*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7827*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7828*dc5640d1SHerbert Xue      deprecated="not deprecated">
7829*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7830*dc5640d1SHerbert Xue      <doc>
7831*dc5640d1SHerbert Xue      <![CDATA[Wraps the given callable in a contextual callable that "transfers" the
7832*dc5640d1SHerbert Xue request to another thread. This acts as a way of transporting
7833*dc5640d1SHerbert Xue request context data from the current thread to a future thread.
7834*dc5640d1SHerbert Xue
7835*dc5640d1SHerbert Xue <p>As opposed to {@link #continueRequest}, this method propagates all
7836*dc5640d1SHerbert Xue existing scoped objects. The primary use case is in server implementations
7837*dc5640d1SHerbert Xue where you can detach the request processing thread while waiting for data,
7838*dc5640d1SHerbert Xue and reattach to a different thread to finish processing at a later time.
7839*dc5640d1SHerbert Xue
7840*dc5640d1SHerbert Xue <p>Because request-scoped objects are not typically thread-safe, the
7841*dc5640d1SHerbert Xue callable returned by this method must not be run on a different thread
7842*dc5640d1SHerbert Xue until the current request scope has terminated. The returned callable will
7843*dc5640d1SHerbert Xue block until the current thread has released the request scope.
7844*dc5640d1SHerbert Xue
7845*dc5640d1SHerbert Xue @param callable code to be executed in another thread, which depends on
7846*dc5640d1SHerbert Xue     the request scope.
7847*dc5640d1SHerbert Xue @return a callable that will invoke the given callable, making the request
7848*dc5640d1SHerbert Xue     context available to it.
7849*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7850*dc5640d1SHerbert Xue     thread, or if the request has completed.
7851*dc5640d1SHerbert Xue @since 4.0]]>
7852*dc5640d1SHerbert Xue      </doc>
7853*dc5640d1SHerbert Xue    </method>
7854*dc5640d1SHerbert Xue    <method name="transferRequest" return="com.google.inject.servlet.RequestScoper"
7855*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7856*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7857*dc5640d1SHerbert Xue      deprecated="not deprecated">
7858*dc5640d1SHerbert Xue      <doc>
7859*dc5640d1SHerbert Xue      <![CDATA[Returns an object that "transfers" the request to another thread. This acts
7860*dc5640d1SHerbert Xue as a way of transporting request context data from the current thread to a
7861*dc5640d1SHerbert Xue future thread. The transferred scope is the one active for the thread that
7862*dc5640d1SHerbert Xue calls this method. A later call to {@code open()} activates the transferred
7863*dc5640d1SHerbert Xue the scope, including propagating any objects scoped at that time.
7864*dc5640d1SHerbert Xue
7865*dc5640d1SHerbert Xue <p>As opposed to {@link #continueRequest}, this method propagates all
7866*dc5640d1SHerbert Xue existing scoped objects. The primary use case is in server implementations
7867*dc5640d1SHerbert Xue where you can detach the request processing thread while waiting for data,
7868*dc5640d1SHerbert Xue and reattach to a different thread to finish processing at a later time.
7869*dc5640d1SHerbert Xue
7870*dc5640d1SHerbert Xue <p>Because request-scoped objects are not typically thread-safe, it is
7871*dc5640d1SHerbert Xue important to avoid applying the same request scope concurrently. The
7872*dc5640d1SHerbert Xue returned Scoper will block on open until the current thread has released
7873*dc5640d1SHerbert Xue the request scope.
7874*dc5640d1SHerbert Xue
7875*dc5640d1SHerbert Xue @return an object that when opened will initiate the request scope
7876*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7877*dc5640d1SHerbert Xue     thread, or if the request has completed.
7878*dc5640d1SHerbert Xue @since 4.1]]>
7879*dc5640d1SHerbert Xue      </doc>
7880*dc5640d1SHerbert Xue    </method>
7881*dc5640d1SHerbert Xue    <method name="isRequestScoped" return="boolean"
7882*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7883*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7884*dc5640d1SHerbert Xue      deprecated="not deprecated">
7885*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
7886*dc5640d1SHerbert Xue      <doc>
7887*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} is request-scoped. If the binding is a
7888*dc5640d1SHerbert Xue {@link com.google.inject.spi.LinkedKeyBinding linked key binding} and
7889*dc5640d1SHerbert Xue belongs to an injector (i. e. it was retrieved via
7890*dc5640d1SHerbert Xue {@link Injector#getBinding Injector.getBinding()}), then this method will
7891*dc5640d1SHerbert Xue also return true if the target binding is request-scoped.
7892*dc5640d1SHerbert Xue
7893*dc5640d1SHerbert Xue @since 4.0]]>
7894*dc5640d1SHerbert Xue      </doc>
7895*dc5640d1SHerbert Xue    </method>
7896*dc5640d1SHerbert Xue    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7897*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7898*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7899*dc5640d1SHerbert Xue      deprecated="not deprecated">
7900*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7901*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7902*dc5640d1SHerbert Xue      <doc>
7903*dc5640d1SHerbert Xue      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7904*dc5640d1SHerbert Xue as the HTTP request scope, but is used if no HTTP request scope is in
7905*dc5640d1SHerbert Xue progress. In this way, keys can be scoped as @RequestScoped and exist
7906*dc5640d1SHerbert Xue in non-HTTP requests (for example: RPC requests) as well as in HTTP
7907*dc5640d1SHerbert Xue request threads.
7908*dc5640d1SHerbert Xue
7909*dc5640d1SHerbert Xue <p>The returned callable will throw a {@link ScopingException} when called
7910*dc5640d1SHerbert Xue if there is a request scope already active on the current thread.
7911*dc5640d1SHerbert Xue
7912*dc5640d1SHerbert Xue @param callable code to be executed which depends on the request scope.
7913*dc5640d1SHerbert Xue     Typically in another thread, but not necessarily so.
7914*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7915*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7916*dc5640d1SHerbert Xue     the value.
7917*dc5640d1SHerbert Xue @return a callable that when called will run inside the a request scope
7918*dc5640d1SHerbert Xue     that exposes the instances in the {@code seedMap} as scoped keys.
7919*dc5640d1SHerbert Xue @since 3.0]]>
7920*dc5640d1SHerbert Xue      </doc>
7921*dc5640d1SHerbert Xue    </method>
7922*dc5640d1SHerbert Xue    <method name="scopeRequest" return="com.google.inject.servlet.RequestScoper"
7923*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7924*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7925*dc5640d1SHerbert Xue      deprecated="not deprecated">
7926*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7927*dc5640d1SHerbert Xue      <doc>
7928*dc5640d1SHerbert Xue      <![CDATA[Returns an object that will apply request scope to a block of code. This is
7929*dc5640d1SHerbert Xue not the same as the HTTP request scope, but is used if no HTTP request
7930*dc5640d1SHerbert Xue scope is in progress. In this way, keys can be scoped as @RequestScoped and
7931*dc5640d1SHerbert Xue exist in non-HTTP requests (for example: RPC requests) as well as in HTTP
7932*dc5640d1SHerbert Xue request threads.
7933*dc5640d1SHerbert Xue
7934*dc5640d1SHerbert Xue <p>The returned object will throw a {@link ScopingException} when opened
7935*dc5640d1SHerbert Xue if there is a request scope already active on the current thread.
7936*dc5640d1SHerbert Xue
7937*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7938*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7939*dc5640d1SHerbert Xue     the value.
7940*dc5640d1SHerbert Xue @return an object that when opened will initiate the request scope
7941*dc5640d1SHerbert Xue @since 4.1]]>
7942*dc5640d1SHerbert Xue      </doc>
7943*dc5640d1SHerbert Xue    </method>
7944*dc5640d1SHerbert Xue    <field name="REQUEST" type="com.google.inject.Scope"
7945*dc5640d1SHerbert Xue      transient="false" volatile="false"
7946*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7947*dc5640d1SHerbert Xue      deprecated="not deprecated">
7948*dc5640d1SHerbert Xue      <doc>
7949*dc5640d1SHerbert Xue      <![CDATA[HTTP servlet request scope.]]>
7950*dc5640d1SHerbert Xue      </doc>
7951*dc5640d1SHerbert Xue    </field>
7952*dc5640d1SHerbert Xue    <field name="SESSION" type="com.google.inject.Scope"
7953*dc5640d1SHerbert Xue      transient="false" volatile="false"
7954*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7955*dc5640d1SHerbert Xue      deprecated="not deprecated">
7956*dc5640d1SHerbert Xue      <doc>
7957*dc5640d1SHerbert Xue      <![CDATA[HTTP session scope.]]>
7958*dc5640d1SHerbert Xue      </doc>
7959*dc5640d1SHerbert Xue    </field>
7960*dc5640d1SHerbert Xue    <doc>
7961*dc5640d1SHerbert Xue    <![CDATA[Servlet scopes.
7962*dc5640d1SHerbert Xue
7963*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7964*dc5640d1SHerbert Xue    </doc>
7965*dc5640d1SHerbert Xue  </class>
7966*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletScopes -->
7967*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.SessionScoped -->
7968*dc5640d1SHerbert Xue  <class name="SessionScoped"    abstract="true"
7969*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7970*dc5640d1SHerbert Xue    deprecated="not deprecated">
7971*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7972*dc5640d1SHerbert Xue    <doc>
7973*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per session.
7974*dc5640d1SHerbert Xue
7975*dc5640d1SHerbert Xue @see com.google.inject.Scopes#SINGLETON
7976*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7977*dc5640d1SHerbert Xue    </doc>
7978*dc5640d1SHerbert Xue  </class>
7979*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.SessionScoped -->
7980*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.UriPatternType -->
7981*dc5640d1SHerbert Xue  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7982*dc5640d1SHerbert Xue    abstract="false"
7983*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7984*dc5640d1SHerbert Xue    deprecated="not deprecated">
7985*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7986*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7987*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7988*dc5640d1SHerbert Xue      deprecated="not deprecated">
7989*dc5640d1SHerbert Xue    </method>
7990*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7991*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7992*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7993*dc5640d1SHerbert Xue      deprecated="not deprecated">
7994*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
7995*dc5640d1SHerbert Xue    </method>
7996*dc5640d1SHerbert Xue    <doc>
7997*dc5640d1SHerbert Xue    <![CDATA[An enumeration of the available URI-pattern matching styles
7998*dc5640d1SHerbert Xue
7999*dc5640d1SHerbert Xue @since 3.0]]>
8000*dc5640d1SHerbert Xue    </doc>
8001*dc5640d1SHerbert Xue  </class>
8002*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.UriPatternType -->
8003*dc5640d1SHerbert Xue</package>
8004*dc5640d1SHerbert Xue<package name="com.google.inject.spi">
8005*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
8006*dc5640d1SHerbert Xue  <interface name="BindingScopingVisitor"    abstract="true"
8007*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8008*dc5640d1SHerbert Xue    deprecated="not deprecated">
8009*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
8010*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8011*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8012*dc5640d1SHerbert Xue      deprecated="not deprecated">
8013*dc5640d1SHerbert Xue      <doc>
8014*dc5640d1SHerbert Xue      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
8015*dc5640d1SHerbert Xue injector bindings.]]>
8016*dc5640d1SHerbert Xue      </doc>
8017*dc5640d1SHerbert Xue    </method>
8018*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
8019*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8020*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8021*dc5640d1SHerbert Xue      deprecated="not deprecated">
8022*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
8023*dc5640d1SHerbert Xue      <doc>
8024*dc5640d1SHerbert Xue      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
8025*dc5640d1SHerbert Xue      </doc>
8026*dc5640d1SHerbert Xue    </method>
8027*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
8028*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8029*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8030*dc5640d1SHerbert Xue      deprecated="not deprecated">
8031*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8032*dc5640d1SHerbert Xue      <doc>
8033*dc5640d1SHerbert Xue      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
8034*dc5640d1SHerbert Xue that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
8035*dc5640d1SHerbert Xue Scope) Binder.bindScope()}.]]>
8036*dc5640d1SHerbert Xue      </doc>
8037*dc5640d1SHerbert Xue    </method>
8038*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
8039*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8040*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8041*dc5640d1SHerbert Xue      deprecated="not deprecated">
8042*dc5640d1SHerbert Xue      <doc>
8043*dc5640d1SHerbert Xue      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
8044*dc5640d1SHerbert Xue injector should use scoping annotations to find a scope. On an injector, it indicates that
8045*dc5640d1SHerbert Xue no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
8046*dc5640d1SHerbert Xue is linked to a scoped binding.]]>
8047*dc5640d1SHerbert Xue      </doc>
8048*dc5640d1SHerbert Xue    </method>
8049*dc5640d1SHerbert Xue    <doc>
8050*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to scope an injection.
8051*dc5640d1SHerbert Xue
8052*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8053*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8054*dc5640d1SHerbert Xue @since 2.0]]>
8055*dc5640d1SHerbert Xue    </doc>
8056*dc5640d1SHerbert Xue  </interface>
8057*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
8058*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
8059*dc5640d1SHerbert Xue  <interface name="BindingTargetVisitor"    abstract="true"
8060*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8061*dc5640d1SHerbert Xue    deprecated="not deprecated">
8062*dc5640d1SHerbert Xue    <method name="visit" return="V"
8063*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8064*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8065*dc5640d1SHerbert Xue      deprecated="not deprecated">
8066*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8067*dc5640d1SHerbert Xue      <doc>
8068*dc5640d1SHerbert Xue      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
8069*dc5640d1SHerbert Xue found in both module and injector bindings.]]>
8070*dc5640d1SHerbert Xue      </doc>
8071*dc5640d1SHerbert Xue    </method>
8072*dc5640d1SHerbert Xue    <method name="visit" return="V"
8073*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8074*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8075*dc5640d1SHerbert Xue      deprecated="not deprecated">
8076*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8077*dc5640d1SHerbert Xue      <doc>
8078*dc5640d1SHerbert Xue      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
8079*dc5640d1SHerbert Xue injections. This target is found in both module and injector bindings.]]>
8080*dc5640d1SHerbert Xue      </doc>
8081*dc5640d1SHerbert Xue    </method>
8082*dc5640d1SHerbert Xue    <method name="visit" return="V"
8083*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8084*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8085*dc5640d1SHerbert Xue      deprecated="not deprecated">
8086*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8087*dc5640d1SHerbert Xue      <doc>
8088*dc5640d1SHerbert Xue      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
8089*dc5640d1SHerbert Xue that provider's {@code get} method is invoked. This target is found in both module and injector
8090*dc5640d1SHerbert Xue bindings.]]>
8091*dc5640d1SHerbert Xue      </doc>
8092*dc5640d1SHerbert Xue    </method>
8093*dc5640d1SHerbert Xue    <method name="visit" return="V"
8094*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8095*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8096*dc5640d1SHerbert Xue      deprecated="not deprecated">
8097*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8098*dc5640d1SHerbert Xue      <doc>
8099*dc5640d1SHerbert Xue      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
8100*dc5640d1SHerbert Xue target is found in both module and injector bindings.]]>
8101*dc5640d1SHerbert Xue      </doc>
8102*dc5640d1SHerbert Xue    </method>
8103*dc5640d1SHerbert Xue    <method name="visit" return="V"
8104*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8105*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8106*dc5640d1SHerbert Xue      deprecated="not deprecated">
8107*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8108*dc5640d1SHerbert Xue      <doc>
8109*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
8110*dc5640d1SHerbert Xue found in injector bindings.]]>
8111*dc5640d1SHerbert Xue      </doc>
8112*dc5640d1SHerbert Xue    </method>
8113*dc5640d1SHerbert Xue    <method name="visit" return="V"
8114*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8115*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8116*dc5640d1SHerbert Xue      deprecated="not deprecated">
8117*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8118*dc5640d1SHerbert Xue      <doc>
8119*dc5640d1SHerbert Xue      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
8120*dc5640d1SHerbert Xue that the injector should use its implicit binding strategies to resolve injections.]]>
8121*dc5640d1SHerbert Xue      </doc>
8122*dc5640d1SHerbert Xue    </method>
8123*dc5640d1SHerbert Xue    <method name="visit" return="V"
8124*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8125*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8126*dc5640d1SHerbert Xue      deprecated="not deprecated">
8127*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8128*dc5640d1SHerbert Xue      <doc>
8129*dc5640d1SHerbert Xue      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
8130*dc5640d1SHerbert Xue {@code constructor}. This target is found only on injector bindings.]]>
8131*dc5640d1SHerbert Xue      </doc>
8132*dc5640d1SHerbert Xue    </method>
8133*dc5640d1SHerbert Xue    <method name="visit" return="V"
8134*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8135*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8136*dc5640d1SHerbert Xue      deprecated="not deprecated">
8137*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8138*dc5640d1SHerbert Xue      <doc>
8139*dc5640d1SHerbert Xue      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
8140*dc5640d1SHerbert Xue has the same binding annotation but a different type. This target is found only on injector
8141*dc5640d1SHerbert Xue bindings.]]>
8142*dc5640d1SHerbert Xue      </doc>
8143*dc5640d1SHerbert Xue    </method>
8144*dc5640d1SHerbert Xue    <method name="visit" return="V"
8145*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8146*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8147*dc5640d1SHerbert Xue      deprecated="not deprecated">
8148*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8149*dc5640d1SHerbert Xue      <doc>
8150*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
8151*dc5640d1SHerbert Xue provided type. This target is found only on injector bindings.]]>
8152*dc5640d1SHerbert Xue      </doc>
8153*dc5640d1SHerbert Xue    </method>
8154*dc5640d1SHerbert Xue    <doc>
8155*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
8156*dc5640d1SHerbert Xue
8157*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8158*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8159*dc5640d1SHerbert Xue @since 2.0]]>
8160*dc5640d1SHerbert Xue    </doc>
8161*dc5640d1SHerbert Xue  </interface>
8162*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
8163*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConstructorBinding -->
8164*dc5640d1SHerbert Xue  <interface name="ConstructorBinding"    abstract="true"
8165*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8166*dc5640d1SHerbert Xue    deprecated="not deprecated">
8167*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8168*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8169*dc5640d1SHerbert Xue    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
8170*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8171*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8172*dc5640d1SHerbert Xue      deprecated="not deprecated">
8173*dc5640d1SHerbert Xue      <doc>
8174*dc5640d1SHerbert Xue      <![CDATA[Gets the constructor this binding injects.]]>
8175*dc5640d1SHerbert Xue      </doc>
8176*dc5640d1SHerbert Xue    </method>
8177*dc5640d1SHerbert Xue    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8178*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8179*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8180*dc5640d1SHerbert Xue      deprecated="not deprecated">
8181*dc5640d1SHerbert Xue      <doc>
8182*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
8183*dc5640d1SHerbert Xue
8184*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8185*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8186*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
8187*dc5640d1SHerbert Xue      </doc>
8188*dc5640d1SHerbert Xue    </method>
8189*dc5640d1SHerbert Xue    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
8190*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8191*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8192*dc5640d1SHerbert Xue      deprecated="not deprecated">
8193*dc5640d1SHerbert Xue      <doc>
8194*dc5640d1SHerbert Xue      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
8195*dc5640d1SHerbert Xue
8196*dc5640d1SHerbert Xue @return a possibly empty map]]>
8197*dc5640d1SHerbert Xue      </doc>
8198*dc5640d1SHerbert Xue    </method>
8199*dc5640d1SHerbert Xue    <doc>
8200*dc5640d1SHerbert Xue    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
8201*dc5640d1SHerbert Xue instantiated by invoking the constructor.
8202*dc5640d1SHerbert Xue
8203*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8204*dc5640d1SHerbert Xue @since 2.0]]>
8205*dc5640d1SHerbert Xue    </doc>
8206*dc5640d1SHerbert Xue  </interface>
8207*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConstructorBinding -->
8208*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
8209*dc5640d1SHerbert Xue  <interface name="ConvertedConstantBinding"    abstract="true"
8210*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8211*dc5640d1SHerbert Xue    deprecated="not deprecated">
8212*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8213*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8214*dc5640d1SHerbert Xue    <method name="getValue" return="T"
8215*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8216*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8217*dc5640d1SHerbert Xue      deprecated="not deprecated">
8218*dc5640d1SHerbert Xue      <doc>
8219*dc5640d1SHerbert Xue      <![CDATA[Returns the converted value.]]>
8220*dc5640d1SHerbert Xue      </doc>
8221*dc5640d1SHerbert Xue    </method>
8222*dc5640d1SHerbert Xue    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
8223*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8224*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8225*dc5640d1SHerbert Xue      deprecated="not deprecated">
8226*dc5640d1SHerbert Xue      <doc>
8227*dc5640d1SHerbert Xue      <![CDATA[Returns the type converter binding used to convert the constant.
8228*dc5640d1SHerbert Xue
8229*dc5640d1SHerbert Xue @since 3.0]]>
8230*dc5640d1SHerbert Xue      </doc>
8231*dc5640d1SHerbert Xue    </method>
8232*dc5640d1SHerbert Xue    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
8233*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8234*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8235*dc5640d1SHerbert Xue      deprecated="not deprecated">
8236*dc5640d1SHerbert Xue      <doc>
8237*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the source binding. That binding can be retrieved from an injector using
8238*dc5640d1SHerbert Xue {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8239*dc5640d1SHerbert Xue      </doc>
8240*dc5640d1SHerbert Xue    </method>
8241*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8242*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8243*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8244*dc5640d1SHerbert Xue      deprecated="not deprecated">
8245*dc5640d1SHerbert Xue      <doc>
8246*dc5640d1SHerbert Xue      <![CDATA[Returns a singleton set containing only the converted key.]]>
8247*dc5640d1SHerbert Xue      </doc>
8248*dc5640d1SHerbert Xue    </method>
8249*dc5640d1SHerbert Xue    <doc>
8250*dc5640d1SHerbert Xue    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
8251*dc5640d1SHerbert Xue binding annotation but a different type.
8252*dc5640d1SHerbert Xue
8253*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8254*dc5640d1SHerbert Xue @since 2.0]]>
8255*dc5640d1SHerbert Xue    </doc>
8256*dc5640d1SHerbert Xue  </interface>
8257*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
8258*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
8259*dc5640d1SHerbert Xue  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
8260*dc5640d1SHerbert Xue    abstract="false"
8261*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8262*dc5640d1SHerbert Xue    deprecated="not deprecated">
8263*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
8264*dc5640d1SHerbert Xue    <constructor name="DefaultBindingScopingVisitor"
8265*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8266*dc5640d1SHerbert Xue      deprecated="not deprecated">
8267*dc5640d1SHerbert Xue    </constructor>
8268*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8269*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8270*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8271*dc5640d1SHerbert Xue      deprecated="not deprecated">
8272*dc5640d1SHerbert Xue      <doc>
8273*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8274*dc5640d1SHerbert Xue      </doc>
8275*dc5640d1SHerbert Xue    </method>
8276*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
8277*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8278*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8279*dc5640d1SHerbert Xue      deprecated="not deprecated">
8280*dc5640d1SHerbert Xue    </method>
8281*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
8282*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8283*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8284*dc5640d1SHerbert Xue      deprecated="not deprecated">
8285*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
8286*dc5640d1SHerbert Xue    </method>
8287*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
8288*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8289*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8290*dc5640d1SHerbert Xue      deprecated="not deprecated">
8291*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8292*dc5640d1SHerbert Xue    </method>
8293*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
8294*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8295*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8296*dc5640d1SHerbert Xue      deprecated="not deprecated">
8297*dc5640d1SHerbert Xue    </method>
8298*dc5640d1SHerbert Xue    <doc>
8299*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8300*dc5640d1SHerbert Xue {@link #visitOther()}, returning its result.
8301*dc5640d1SHerbert Xue
8302*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8303*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8304*dc5640d1SHerbert Xue
8305*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8306*dc5640d1SHerbert Xue @since 2.0]]>
8307*dc5640d1SHerbert Xue    </doc>
8308*dc5640d1SHerbert Xue  </class>
8309*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
8310*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
8311*dc5640d1SHerbert Xue  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
8312*dc5640d1SHerbert Xue    abstract="true"
8313*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8314*dc5640d1SHerbert Xue    deprecated="not deprecated">
8315*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
8316*dc5640d1SHerbert Xue    <constructor name="DefaultBindingTargetVisitor"
8317*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8318*dc5640d1SHerbert Xue      deprecated="not deprecated">
8319*dc5640d1SHerbert Xue    </constructor>
8320*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8321*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8322*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8323*dc5640d1SHerbert Xue      deprecated="not deprecated">
8324*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
8325*dc5640d1SHerbert Xue      <doc>
8326*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8327*dc5640d1SHerbert Xue      </doc>
8328*dc5640d1SHerbert Xue    </method>
8329*dc5640d1SHerbert Xue    <method name="visit" return="V"
8330*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8331*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8332*dc5640d1SHerbert Xue      deprecated="not deprecated">
8333*dc5640d1SHerbert Xue      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8334*dc5640d1SHerbert Xue    </method>
8335*dc5640d1SHerbert Xue    <method name="visit" return="V"
8336*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8337*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8338*dc5640d1SHerbert Xue      deprecated="not deprecated">
8339*dc5640d1SHerbert Xue      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8340*dc5640d1SHerbert Xue    </method>
8341*dc5640d1SHerbert Xue    <method name="visit" return="V"
8342*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8343*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8344*dc5640d1SHerbert Xue      deprecated="not deprecated">
8345*dc5640d1SHerbert Xue      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8346*dc5640d1SHerbert Xue    </method>
8347*dc5640d1SHerbert Xue    <method name="visit" return="V"
8348*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8349*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8350*dc5640d1SHerbert Xue      deprecated="not deprecated">
8351*dc5640d1SHerbert Xue      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8352*dc5640d1SHerbert Xue    </method>
8353*dc5640d1SHerbert Xue    <method name="visit" return="V"
8354*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8355*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8356*dc5640d1SHerbert Xue      deprecated="not deprecated">
8357*dc5640d1SHerbert Xue      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8358*dc5640d1SHerbert Xue    </method>
8359*dc5640d1SHerbert Xue    <method name="visit" return="V"
8360*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8361*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8362*dc5640d1SHerbert Xue      deprecated="not deprecated">
8363*dc5640d1SHerbert Xue      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8364*dc5640d1SHerbert Xue    </method>
8365*dc5640d1SHerbert Xue    <method name="visit" return="V"
8366*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8367*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8368*dc5640d1SHerbert Xue      deprecated="not deprecated">
8369*dc5640d1SHerbert Xue      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8370*dc5640d1SHerbert Xue    </method>
8371*dc5640d1SHerbert Xue    <method name="visit" return="V"
8372*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8373*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8374*dc5640d1SHerbert Xue      deprecated="not deprecated">
8375*dc5640d1SHerbert Xue      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8376*dc5640d1SHerbert Xue    </method>
8377*dc5640d1SHerbert Xue    <method name="visit" return="V"
8378*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8379*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8380*dc5640d1SHerbert Xue      deprecated="not deprecated">
8381*dc5640d1SHerbert Xue      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8382*dc5640d1SHerbert Xue    </method>
8383*dc5640d1SHerbert Xue    <doc>
8384*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
8385*dc5640d1SHerbert Xue #visitOther(Binding)}, returning its result.
8386*dc5640d1SHerbert Xue
8387*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8388*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8389*dc5640d1SHerbert Xue
8390*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8391*dc5640d1SHerbert Xue @since 2.0]]>
8392*dc5640d1SHerbert Xue    </doc>
8393*dc5640d1SHerbert Xue  </class>
8394*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
8395*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
8396*dc5640d1SHerbert Xue  <class name="DefaultElementVisitor" extends="java.lang.Object"
8397*dc5640d1SHerbert Xue    abstract="true"
8398*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8399*dc5640d1SHerbert Xue    deprecated="not deprecated">
8400*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
8401*dc5640d1SHerbert Xue    <constructor name="DefaultElementVisitor"
8402*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8403*dc5640d1SHerbert Xue      deprecated="not deprecated">
8404*dc5640d1SHerbert Xue    </constructor>
8405*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8406*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8407*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8408*dc5640d1SHerbert Xue      deprecated="not deprecated">
8409*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
8410*dc5640d1SHerbert Xue      <doc>
8411*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8412*dc5640d1SHerbert Xue      </doc>
8413*dc5640d1SHerbert Xue    </method>
8414*dc5640d1SHerbert Xue    <method name="visit" return="V"
8415*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8416*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8417*dc5640d1SHerbert Xue      deprecated="not deprecated">
8418*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
8419*dc5640d1SHerbert Xue    </method>
8420*dc5640d1SHerbert Xue    <method name="visit" return="V"
8421*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8422*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8423*dc5640d1SHerbert Xue      deprecated="not deprecated">
8424*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8425*dc5640d1SHerbert Xue    </method>
8426*dc5640d1SHerbert Xue    <method name="visit" return="V"
8427*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8428*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8429*dc5640d1SHerbert Xue      deprecated="not deprecated">
8430*dc5640d1SHerbert Xue      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
8431*dc5640d1SHerbert Xue    </method>
8432*dc5640d1SHerbert Xue    <method name="visit" return="V"
8433*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8434*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8435*dc5640d1SHerbert Xue      deprecated="not deprecated">
8436*dc5640d1SHerbert Xue      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
8437*dc5640d1SHerbert Xue    </method>
8438*dc5640d1SHerbert Xue    <method name="visit" return="V"
8439*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8440*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8441*dc5640d1SHerbert Xue      deprecated="not deprecated">
8442*dc5640d1SHerbert Xue      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
8443*dc5640d1SHerbert Xue    </method>
8444*dc5640d1SHerbert Xue    <method name="visit" return="V"
8445*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8446*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8447*dc5640d1SHerbert Xue      deprecated="not deprecated">
8448*dc5640d1SHerbert Xue      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8449*dc5640d1SHerbert Xue    </method>
8450*dc5640d1SHerbert Xue    <method name="visit" return="V"
8451*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8452*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8453*dc5640d1SHerbert Xue      deprecated="not deprecated">
8454*dc5640d1SHerbert Xue      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8455*dc5640d1SHerbert Xue    </method>
8456*dc5640d1SHerbert Xue    <method name="visit" return="V"
8457*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8458*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8459*dc5640d1SHerbert Xue      deprecated="not deprecated">
8460*dc5640d1SHerbert Xue      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
8461*dc5640d1SHerbert Xue    </method>
8462*dc5640d1SHerbert Xue    <method name="visit" return="V"
8463*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8464*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8465*dc5640d1SHerbert Xue      deprecated="not deprecated">
8466*dc5640d1SHerbert Xue      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
8467*dc5640d1SHerbert Xue    </method>
8468*dc5640d1SHerbert Xue    <method name="visit" return="V"
8469*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8470*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8471*dc5640d1SHerbert Xue      deprecated="not deprecated">
8472*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8473*dc5640d1SHerbert Xue    </method>
8474*dc5640d1SHerbert Xue    <method name="visit" return="V"
8475*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8476*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8477*dc5640d1SHerbert Xue      deprecated="not deprecated">
8478*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8479*dc5640d1SHerbert Xue    </method>
8480*dc5640d1SHerbert Xue    <method name="visit" return="V"
8481*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8482*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8483*dc5640d1SHerbert Xue      deprecated="not deprecated">
8484*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8485*dc5640d1SHerbert Xue    </method>
8486*dc5640d1SHerbert Xue    <method name="visit" return="V"
8487*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8488*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8489*dc5640d1SHerbert Xue      deprecated="not deprecated">
8490*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8491*dc5640d1SHerbert Xue    </method>
8492*dc5640d1SHerbert Xue    <method name="visit" return="V"
8493*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8494*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8495*dc5640d1SHerbert Xue      deprecated="not deprecated">
8496*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8497*dc5640d1SHerbert Xue    </method>
8498*dc5640d1SHerbert Xue    <method name="visit" return="V"
8499*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8500*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8501*dc5640d1SHerbert Xue      deprecated="not deprecated">
8502*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8503*dc5640d1SHerbert Xue    </method>
8504*dc5640d1SHerbert Xue    <method name="visit" return="V"
8505*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8506*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8507*dc5640d1SHerbert Xue      deprecated="not deprecated">
8508*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8509*dc5640d1SHerbert Xue    </method>
8510*dc5640d1SHerbert Xue    <method name="visit" return="V"
8511*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8512*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8513*dc5640d1SHerbert Xue      deprecated="not deprecated">
8514*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8515*dc5640d1SHerbert Xue    </method>
8516*dc5640d1SHerbert Xue    <doc>
8517*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8518*dc5640d1SHerbert Xue {@link #visitOther(Element)}, returning its result.
8519*dc5640d1SHerbert Xue
8520*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8521*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8522*dc5640d1SHerbert Xue
8523*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8524*dc5640d1SHerbert Xue @since 2.0]]>
8525*dc5640d1SHerbert Xue    </doc>
8526*dc5640d1SHerbert Xue  </class>
8527*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
8528*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Dependency -->
8529*dc5640d1SHerbert Xue  <class name="Dependency" extends="java.lang.Object"
8530*dc5640d1SHerbert Xue    abstract="false"
8531*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8532*dc5640d1SHerbert Xue    deprecated="not deprecated">
8533*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
8534*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8535*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8536*dc5640d1SHerbert Xue      deprecated="not deprecated">
8537*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
8538*dc5640d1SHerbert Xue      <doc>
8539*dc5640d1SHerbert Xue      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
8540*dc5640d1SHerbert Xue nullable.]]>
8541*dc5640d1SHerbert Xue      </doc>
8542*dc5640d1SHerbert Xue    </method>
8543*dc5640d1SHerbert Xue    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8544*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8545*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8546*dc5640d1SHerbert Xue      deprecated="not deprecated">
8547*dc5640d1SHerbert Xue      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
8548*dc5640d1SHerbert Xue      <doc>
8549*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies from the given injection points.]]>
8550*dc5640d1SHerbert Xue      </doc>
8551*dc5640d1SHerbert Xue    </method>
8552*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8553*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8554*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8555*dc5640d1SHerbert Xue      deprecated="not deprecated">
8556*dc5640d1SHerbert Xue      <doc>
8557*dc5640d1SHerbert Xue      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
8558*dc5640d1SHerbert Xue      </doc>
8559*dc5640d1SHerbert Xue    </method>
8560*dc5640d1SHerbert Xue    <method name="isNullable" return="boolean"
8561*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8562*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8563*dc5640d1SHerbert Xue      deprecated="not deprecated">
8564*dc5640d1SHerbert Xue      <doc>
8565*dc5640d1SHerbert Xue      <![CDATA[Returns true if null is a legal value for this dependency.]]>
8566*dc5640d1SHerbert Xue      </doc>
8567*dc5640d1SHerbert Xue    </method>
8568*dc5640d1SHerbert Xue    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
8569*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8570*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8571*dc5640d1SHerbert Xue      deprecated="not deprecated">
8572*dc5640d1SHerbert Xue      <doc>
8573*dc5640d1SHerbert Xue      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
8574*dc5640d1SHerbert Xue attached to a particular injection point.]]>
8575*dc5640d1SHerbert Xue      </doc>
8576*dc5640d1SHerbert Xue    </method>
8577*dc5640d1SHerbert Xue    <method name="getParameterIndex" return="int"
8578*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8579*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8580*dc5640d1SHerbert Xue      deprecated="not deprecated">
8581*dc5640d1SHerbert Xue      <doc>
8582*dc5640d1SHerbert Xue      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
8583*dc5640d1SHerbert Xue this dependency does not belong to a parameter list. Only method and constuctor dependencies
8584*dc5640d1SHerbert Xue are elements in a parameter list.]]>
8585*dc5640d1SHerbert Xue      </doc>
8586*dc5640d1SHerbert Xue    </method>
8587*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
8588*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8589*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8590*dc5640d1SHerbert Xue      deprecated="not deprecated">
8591*dc5640d1SHerbert Xue    </method>
8592*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
8593*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8594*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8595*dc5640d1SHerbert Xue      deprecated="not deprecated">
8596*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
8597*dc5640d1SHerbert Xue    </method>
8598*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8599*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8600*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8601*dc5640d1SHerbert Xue      deprecated="not deprecated">
8602*dc5640d1SHerbert Xue    </method>
8603*dc5640d1SHerbert Xue    <doc>
8604*dc5640d1SHerbert Xue    <![CDATA[A variable that can be resolved by an injector.
8605*dc5640d1SHerbert Xue
8606*dc5640d1SHerbert Xue <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
8607*dc5640d1SHerbert Xue that's attached to a constructor, method or field.
8608*dc5640d1SHerbert Xue
8609*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8610*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8611*dc5640d1SHerbert Xue @since 2.0]]>
8612*dc5640d1SHerbert Xue    </doc>
8613*dc5640d1SHerbert Xue  </class>
8614*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Dependency -->
8615*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DependencyAndSource -->
8616*dc5640d1SHerbert Xue  <class name="DependencyAndSource" extends="java.lang.Object"
8617*dc5640d1SHerbert Xue    abstract="false"
8618*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8619*dc5640d1SHerbert Xue    deprecated="not deprecated">
8620*dc5640d1SHerbert Xue    <constructor name="DependencyAndSource" type="com.google.inject.spi.Dependency&lt;?&gt;, java.lang.Object"
8621*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8622*dc5640d1SHerbert Xue      deprecated="not deprecated">
8623*dc5640d1SHerbert Xue    </constructor>
8624*dc5640d1SHerbert Xue    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;?&gt;"
8625*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8626*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8627*dc5640d1SHerbert Xue      deprecated="not deprecated">
8628*dc5640d1SHerbert Xue      <doc>
8629*dc5640d1SHerbert Xue      <![CDATA[Returns the Dependency, if one exists. For anything that can be referenced
8630*dc5640d1SHerbert Xue by {@link Injector#getBinding}, a dependency exists. A dependency will not
8631*dc5640d1SHerbert Xue exist (and this will return null) for types initialized with
8632*dc5640d1SHerbert Xue {@link Binder#requestInjection} or {@link Injector#injectMembers(Object)},
8633*dc5640d1SHerbert Xue nor will it exist for objects injected into Providers bound with
8634*dc5640d1SHerbert Xue LinkedBindingBuilder#toProvider(Provider).]]>
8635*dc5640d1SHerbert Xue      </doc>
8636*dc5640d1SHerbert Xue    </method>
8637*dc5640d1SHerbert Xue    <method name="getBindingSource" return="java.lang.String"
8638*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8639*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8640*dc5640d1SHerbert Xue      deprecated="not deprecated">
8641*dc5640d1SHerbert Xue      <doc>
8642*dc5640d1SHerbert Xue      <![CDATA[Returns a string describing where this dependency was bound. If the binding
8643*dc5640d1SHerbert Xue was just-in-time, there is no valid binding source, so this describes the
8644*dc5640d1SHerbert Xue class in question.]]>
8645*dc5640d1SHerbert Xue      </doc>
8646*dc5640d1SHerbert Xue    </method>
8647*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8648*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8649*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8650*dc5640d1SHerbert Xue      deprecated="not deprecated">
8651*dc5640d1SHerbert Xue    </method>
8652*dc5640d1SHerbert Xue    <doc>
8653*dc5640d1SHerbert Xue    <![CDATA[A combination of a {@link Dependency} and the {@link Binding#getSource()
8654*dc5640d1SHerbert Xue source} where the dependency was bound.
8655*dc5640d1SHerbert Xue
8656*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8657*dc5640d1SHerbert Xue @since 4.0]]>
8658*dc5640d1SHerbert Xue    </doc>
8659*dc5640d1SHerbert Xue  </class>
8660*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DependencyAndSource -->
8661*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
8662*dc5640d1SHerbert Xue  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
8663*dc5640d1SHerbert Xue    abstract="false"
8664*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8665*dc5640d1SHerbert Xue    deprecated="not deprecated">
8666*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8667*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8668*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8669*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8670*dc5640d1SHerbert Xue      deprecated="not deprecated">
8671*dc5640d1SHerbert Xue    </method>
8672*dc5640d1SHerbert Xue    <method name="applyTo"
8673*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8674*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8675*dc5640d1SHerbert Xue      deprecated="not deprecated">
8676*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8677*dc5640d1SHerbert Xue    </method>
8678*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8679*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8680*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8681*dc5640d1SHerbert Xue      deprecated="not deprecated">
8682*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8683*dc5640d1SHerbert Xue    </method>
8684*dc5640d1SHerbert Xue    <doc>
8685*dc5640d1SHerbert Xue    <![CDATA[A request to disable circular proxies.
8686*dc5640d1SHerbert Xue
8687*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8688*dc5640d1SHerbert Xue @since 3.0]]>
8689*dc5640d1SHerbert Xue    </doc>
8690*dc5640d1SHerbert Xue  </class>
8691*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
8692*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.Element -->
8693*dc5640d1SHerbert Xue  <interface name="Element"    abstract="true"
8694*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8695*dc5640d1SHerbert Xue    deprecated="not deprecated">
8696*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8697*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8698*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8699*dc5640d1SHerbert Xue      deprecated="not deprecated">
8700*dc5640d1SHerbert Xue      <doc>
8701*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
8702*dc5640d1SHerbert Xue configured. Used by Guice in the production of descriptive error messages.
8703*dc5640d1SHerbert Xue
8704*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8705*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
8706*dc5640d1SHerbert Xue unfamiliar.]]>
8707*dc5640d1SHerbert Xue      </doc>
8708*dc5640d1SHerbert Xue    </method>
8709*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8710*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8711*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8712*dc5640d1SHerbert Xue      deprecated="not deprecated">
8713*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8714*dc5640d1SHerbert Xue      <doc>
8715*dc5640d1SHerbert Xue      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
8716*dc5640d1SHerbert Xue
8717*dc5640d1SHerbert Xue @param visitor to call back on]]>
8718*dc5640d1SHerbert Xue      </doc>
8719*dc5640d1SHerbert Xue    </method>
8720*dc5640d1SHerbert Xue    <method name="applyTo"
8721*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8722*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8723*dc5640d1SHerbert Xue      deprecated="not deprecated">
8724*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8725*dc5640d1SHerbert Xue      <doc>
8726*dc5640d1SHerbert Xue      <![CDATA[Writes this module element to the given binder (optional operation).
8727*dc5640d1SHerbert Xue
8728*dc5640d1SHerbert Xue @param binder to apply configuration element to
8729*dc5640d1SHerbert Xue @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
8730*dc5640d1SHerbert Xue     element.]]>
8731*dc5640d1SHerbert Xue      </doc>
8732*dc5640d1SHerbert Xue    </method>
8733*dc5640d1SHerbert Xue    <doc>
8734*dc5640d1SHerbert Xue    <![CDATA[A core component of a module or injector.
8735*dc5640d1SHerbert Xue
8736*dc5640d1SHerbert Xue <p>The elements of a module can be inspected, validated and rewritten. Use {@link
8737*dc5640d1SHerbert Xue Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
8738*dc5640d1SHerbert Xue from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
8739*dc5640d1SHerbert Xue This can be used for static analysis and generation of Guice modules.
8740*dc5640d1SHerbert Xue
8741*dc5640d1SHerbert Xue <p>The elements of an injector can be inspected and exercised. Use {@link
8742*dc5640d1SHerbert Xue com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
8743*dc5640d1SHerbert Xue
8744*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8745*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8746*dc5640d1SHerbert Xue @since 2.0]]>
8747*dc5640d1SHerbert Xue    </doc>
8748*dc5640d1SHerbert Xue  </interface>
8749*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.Element -->
8750*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Elements -->
8751*dc5640d1SHerbert Xue  <class name="Elements" extends="java.lang.Object"
8752*dc5640d1SHerbert Xue    abstract="false"
8753*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8754*dc5640d1SHerbert Xue    deprecated="not deprecated">
8755*dc5640d1SHerbert Xue    <constructor name="Elements"
8756*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8757*dc5640d1SHerbert Xue      deprecated="not deprecated">
8758*dc5640d1SHerbert Xue    </constructor>
8759*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8760*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8761*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8762*dc5640d1SHerbert Xue      deprecated="not deprecated">
8763*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
8764*dc5640d1SHerbert Xue      <doc>
8765*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8766*dc5640d1SHerbert Xue      </doc>
8767*dc5640d1SHerbert Xue    </method>
8768*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8769*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8770*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8771*dc5640d1SHerbert Xue      deprecated="not deprecated">
8772*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
8773*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
8774*dc5640d1SHerbert Xue      <doc>
8775*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8776*dc5640d1SHerbert Xue      </doc>
8777*dc5640d1SHerbert Xue    </method>
8778*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8779*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8780*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8781*dc5640d1SHerbert Xue      deprecated="not deprecated">
8782*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8783*dc5640d1SHerbert Xue      <doc>
8784*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8785*dc5640d1SHerbert Xue      </doc>
8786*dc5640d1SHerbert Xue    </method>
8787*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8788*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8789*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8790*dc5640d1SHerbert Xue      deprecated="not deprecated">
8791*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
8792*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8793*dc5640d1SHerbert Xue      <doc>
8794*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8795*dc5640d1SHerbert Xue      </doc>
8796*dc5640d1SHerbert Xue    </method>
8797*dc5640d1SHerbert Xue    <method name="getModule" return="com.google.inject.Module"
8798*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8799*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8800*dc5640d1SHerbert Xue      deprecated="not deprecated">
8801*dc5640d1SHerbert Xue      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8802*dc5640d1SHerbert Xue      <doc>
8803*dc5640d1SHerbert Xue      <![CDATA[Returns the module composed of {@code elements}.]]>
8804*dc5640d1SHerbert Xue      </doc>
8805*dc5640d1SHerbert Xue    </method>
8806*dc5640d1SHerbert Xue    <doc>
8807*dc5640d1SHerbert Xue    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8808*dc5640d1SHerbert Xue Element#applyTo(Binder) rewritten}.
8809*dc5640d1SHerbert Xue
8810*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8811*dc5640d1SHerbert Xue @since 2.0]]>
8812*dc5640d1SHerbert Xue    </doc>
8813*dc5640d1SHerbert Xue  </class>
8814*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Elements -->
8815*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ElementSource -->
8816*dc5640d1SHerbert Xue  <class name="ElementSource" extends="java.lang.Object"
8817*dc5640d1SHerbert Xue    abstract="false"
8818*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8819*dc5640d1SHerbert Xue    deprecated="not deprecated">
8820*dc5640d1SHerbert Xue    <method name="getOriginalElementSource" return="com.google.inject.spi.ElementSource"
8821*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8822*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8823*dc5640d1SHerbert Xue      deprecated="not deprecated">
8824*dc5640d1SHerbert Xue      <doc>
8825*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link ElementSource} of the element this was created or copied from. If this was
8826*dc5640d1SHerbert Xue not created or copied from another element, returns {@code null}.]]>
8827*dc5640d1SHerbert Xue      </doc>
8828*dc5640d1SHerbert Xue    </method>
8829*dc5640d1SHerbert Xue    <method name="getDeclaringSource" return="java.lang.Object"
8830*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8832*dc5640d1SHerbert Xue      deprecated="not deprecated">
8833*dc5640d1SHerbert Xue      <doc>
8834*dc5640d1SHerbert Xue      <![CDATA[Returns a single location in source code that defines the element. It can be any object
8835*dc5640d1SHerbert Xue such as {@link java.lang.reflect.Constructor}, {@link java.lang.reflect.Method},
8836*dc5640d1SHerbert Xue {@link java.lang.reflect.Field}, {@link StackTraceElement}, etc. For
8837*dc5640d1SHerbert Xue example, if the element is created from a method annotated by {@literal @Provides}, the
8838*dc5640d1SHerbert Xue declaring source of element would be the method itself.]]>
8839*dc5640d1SHerbert Xue      </doc>
8840*dc5640d1SHerbert Xue    </method>
8841*dc5640d1SHerbert Xue    <method name="getModuleClassNames" return="java.util.List&lt;java.lang.String&gt;"
8842*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8843*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8844*dc5640d1SHerbert Xue      deprecated="not deprecated">
8845*dc5640d1SHerbert Xue      <doc>
8846*dc5640d1SHerbert Xue      <![CDATA[Returns the class names of modules involved in creating this {@link Element}. The first
8847*dc5640d1SHerbert Xue element (index 0) is the class name of module that defined the element, and the last element
8848*dc5640d1SHerbert Xue is the class name of root module.]]>
8849*dc5640d1SHerbert Xue      </doc>
8850*dc5640d1SHerbert Xue    </method>
8851*dc5640d1SHerbert Xue    <method name="getModuleConfigurePositionsInStackTrace" return="java.util.List&lt;java.lang.Integer&gt;"
8852*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8853*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8854*dc5640d1SHerbert Xue      deprecated="not deprecated">
8855*dc5640d1SHerbert Xue      <doc>
8856*dc5640d1SHerbert Xue      <![CDATA[Returns the position of {@link com.google.inject.Module#configure configure(Binder)} method
8857*dc5640d1SHerbert Xue call in the {@link #getStackTrace stack trace} for modules that their classes returned by
8858*dc5640d1SHerbert Xue {@link #getModuleClassNames}. For example, if the stack trace looks like the following:
8859*dc5640d1SHerbert Xue <p>
8860*dc5640d1SHerbert Xue {@code
8861*dc5640d1SHerbert Xue  0 - Binder.bind(),
8862*dc5640d1SHerbert Xue  1 - ModuleTwo.configure(),
8863*dc5640d1SHerbert Xue  2 - Binder.install(),
8864*dc5640d1SHerbert Xue  3 - ModuleOne.configure(),
8865*dc5640d1SHerbert Xue  4 - theRest().
8866*dc5640d1SHerbert Xue }
8867*dc5640d1SHerbert Xue <p>
8868*dc5640d1SHerbert Xue 1 and 3 are returned.
8869*dc5640d1SHerbert Xue <p>
8870*dc5640d1SHerbert Xue In the cases where stack trace is not available (i.e., the stack trace was not collected),
8871*dc5640d1SHerbert Xue it returns -1 for all module positions.]]>
8872*dc5640d1SHerbert Xue      </doc>
8873*dc5640d1SHerbert Xue    </method>
8874*dc5640d1SHerbert Xue    <method name="getStackTrace" return="java.lang.StackTraceElement[]"
8875*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8876*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8877*dc5640d1SHerbert Xue      deprecated="not deprecated">
8878*dc5640d1SHerbert Xue      <doc>
8879*dc5640d1SHerbert Xue      <![CDATA[Returns the sequence of method calls that ends at one of {@link com.google.inject.Binder}
8880*dc5640d1SHerbert Xue {@code bindXXX()} methods and eventually defines the element. Note that
8881*dc5640d1SHerbert Xue {@link #getStackTrace} lists {@link StackTraceElement StackTraceElements} in reverse
8882*dc5640d1SHerbert Xue chronological order. The first element (index zero) is the last method call and the last
8883*dc5640d1SHerbert Xue element is the first method invocation. In the cases where stack trace is not available
8884*dc5640d1SHerbert Xue (i.e.,the stack trace was not collected), it returns an empty array.]]>
8885*dc5640d1SHerbert Xue      </doc>
8886*dc5640d1SHerbert Xue    </method>
8887*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8888*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8889*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8890*dc5640d1SHerbert Xue      deprecated="not deprecated">
8891*dc5640d1SHerbert Xue      <doc>
8892*dc5640d1SHerbert Xue      <![CDATA[Returns {@code getDeclaringSource().toString()} value.]]>
8893*dc5640d1SHerbert Xue      </doc>
8894*dc5640d1SHerbert Xue    </method>
8895*dc5640d1SHerbert Xue    <doc>
8896*dc5640d1SHerbert Xue    <![CDATA[Contains information about where and how an {@link Element element} was
8897*dc5640d1SHerbert Xue bound.
8898*dc5640d1SHerbert Xue <p>
8899*dc5640d1SHerbert Xue The {@link #getDeclaringSource() declaring source} refers to a location in
8900*dc5640d1SHerbert Xue source code that defines the Guice {@link Element element}. For example, if
8901*dc5640d1SHerbert Xue the element is created from a method annotated by {@literal @Provides}, the
8902*dc5640d1SHerbert Xue declaring source of element would be the method itself.
8903*dc5640d1SHerbert Xue <p>
8904*dc5640d1SHerbert Xue The {@link #getStackTrace()} refers to the sequence of calls ends at one of
8905*dc5640d1SHerbert Xue {@link com.google.inject.Binder} {@code bindXXX()} methods and eventually
8906*dc5640d1SHerbert Xue defines the element. Note that {@link #getStackTrace()} lists
8907*dc5640d1SHerbert Xue {@link StackTraceElement StackTraceElements} in reverse chronological order.
8908*dc5640d1SHerbert Xue The first element (index zero) is the last method call and the last element
8909*dc5640d1SHerbert Xue is the first method invocation. By default, the stack trace is not collected.
8910*dc5640d1SHerbert Xue The default behavior can be changed by setting the
8911*dc5640d1SHerbert Xue {@code guice_include_stack_traces} flag value. The value can be either
8912*dc5640d1SHerbert Xue {@code OFF}, {@code ONLY_FOR_DECLARING_SOURCE} or {@code COMPLETE}. Note that
8913*dc5640d1SHerbert Xue collecting stack traces for every binding can cause a performance hit when
8914*dc5640d1SHerbert Xue the injector is created.
8915*dc5640d1SHerbert Xue <p>
8916*dc5640d1SHerbert Xue The sequence of class names of {@link com.google.inject.Module modules}
8917*dc5640d1SHerbert Xue involved in the element creation can be retrieved by
8918*dc5640d1SHerbert Xue {@link #getModuleClassNames()}. Similar to {@link #getStackTrace()}, the
8919*dc5640d1SHerbert Xue order is reverse chronological. The first module (index 0) is the module that
8920*dc5640d1SHerbert Xue installs the {@link Element element}. The last module is the root module.
8921*dc5640d1SHerbert Xue <p>
8922*dc5640d1SHerbert Xue In order to support the cases where a Guice {@link Element element} is
8923*dc5640d1SHerbert Xue created from another Guice {@link Element element} (original) (e.g., by
8924*dc5640d1SHerbert Xue {@link Element#applyTo}), it also provides a reference to the original
8925*dc5640d1SHerbert Xue element source ({@link #getOriginalElementSource()}).
8926*dc5640d1SHerbert Xue
8927*dc5640d1SHerbert Xue @since 4.0]]>
8928*dc5640d1SHerbert Xue    </doc>
8929*dc5640d1SHerbert Xue  </class>
8930*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ElementSource -->
8931*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ElementVisitor -->
8932*dc5640d1SHerbert Xue  <interface name="ElementVisitor"    abstract="true"
8933*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8934*dc5640d1SHerbert Xue    deprecated="not deprecated">
8935*dc5640d1SHerbert Xue    <method name="visit" return="V"
8936*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8937*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8938*dc5640d1SHerbert Xue      deprecated="not deprecated">
8939*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8940*dc5640d1SHerbert Xue      <doc>
8941*dc5640d1SHerbert Xue      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8942*dc5640d1SHerbert Xue instances of the type.]]>
8943*dc5640d1SHerbert Xue      </doc>
8944*dc5640d1SHerbert Xue    </method>
8945*dc5640d1SHerbert Xue    <method name="visit" return="V"
8946*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8947*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8948*dc5640d1SHerbert Xue      deprecated="not deprecated">
8949*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8950*dc5640d1SHerbert Xue      <doc>
8951*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8952*dc5640d1SHerbert Xue      </doc>
8953*dc5640d1SHerbert Xue    </method>
8954*dc5640d1SHerbert Xue    <method name="visit" return="V"
8955*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8956*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8957*dc5640d1SHerbert Xue      deprecated="not deprecated">
8958*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8959*dc5640d1SHerbert Xue      <doc>
8960*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8961*dc5640d1SHerbert Xue      </doc>
8962*dc5640d1SHerbert Xue    </method>
8963*dc5640d1SHerbert Xue    <method name="visit" return="V"
8964*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8965*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8966*dc5640d1SHerbert Xue      deprecated="not deprecated">
8967*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8968*dc5640d1SHerbert Xue      <doc>
8969*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of type converters for matching target types.]]>
8970*dc5640d1SHerbert Xue      </doc>
8971*dc5640d1SHerbert Xue    </method>
8972*dc5640d1SHerbert Xue    <method name="visit" return="V"
8973*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8974*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8975*dc5640d1SHerbert Xue      deprecated="not deprecated">
8976*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8977*dc5640d1SHerbert Xue      <doc>
8978*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8979*dc5640d1SHerbert Xue      </doc>
8980*dc5640d1SHerbert Xue    </method>
8981*dc5640d1SHerbert Xue    <method name="visit" return="V"
8982*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8983*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8984*dc5640d1SHerbert Xue      deprecated="not deprecated">
8985*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8986*dc5640d1SHerbert Xue      <doc>
8987*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8988*dc5640d1SHerbert Xue      </doc>
8989*dc5640d1SHerbert Xue    </method>
8990*dc5640d1SHerbert Xue    <method name="visit" return="V"
8991*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8992*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8993*dc5640d1SHerbert Xue      deprecated="not deprecated">
8994*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8995*dc5640d1SHerbert Xue      <doc>
8996*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the provider for a type.]]>
8997*dc5640d1SHerbert Xue      </doc>
8998*dc5640d1SHerbert Xue    </method>
8999*dc5640d1SHerbert Xue    <method name="visit" return="V"
9000*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9001*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9002*dc5640d1SHerbert Xue      deprecated="not deprecated">
9003*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
9004*dc5640d1SHerbert Xue      <doc>
9005*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the members injector.]]>
9006*dc5640d1SHerbert Xue      </doc>
9007*dc5640d1SHerbert Xue    </method>
9008*dc5640d1SHerbert Xue    <method name="visit" return="V"
9009*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9010*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9011*dc5640d1SHerbert Xue      deprecated="not deprecated">
9012*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
9013*dc5640d1SHerbert Xue      <doc>
9014*dc5640d1SHerbert Xue      <![CDATA[Visit an error message and the context in which it occured.]]>
9015*dc5640d1SHerbert Xue      </doc>
9016*dc5640d1SHerbert Xue    </method>
9017*dc5640d1SHerbert Xue    <method name="visit" return="V"
9018*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9019*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9020*dc5640d1SHerbert Xue      deprecated="not deprecated">
9021*dc5640d1SHerbert Xue      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
9022*dc5640d1SHerbert Xue      <doc>
9023*dc5640d1SHerbert Xue      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
9024*dc5640d1SHerbert Xue private binder}.]]>
9025*dc5640d1SHerbert Xue      </doc>
9026*dc5640d1SHerbert Xue    </method>
9027*dc5640d1SHerbert Xue    <method name="visit" return="V"
9028*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9029*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9030*dc5640d1SHerbert Xue      deprecated="not deprecated">
9031*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
9032*dc5640d1SHerbert Xue      <doc>
9033*dc5640d1SHerbert Xue      <![CDATA[Visit an injectable type listener binding.]]>
9034*dc5640d1SHerbert Xue      </doc>
9035*dc5640d1SHerbert Xue    </method>
9036*dc5640d1SHerbert Xue    <method name="visit" return="V"
9037*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9038*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9039*dc5640d1SHerbert Xue      deprecated="not deprecated">
9040*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
9041*dc5640d1SHerbert Xue      <doc>
9042*dc5640d1SHerbert Xue      <![CDATA[Visit a provision listener binding.
9043*dc5640d1SHerbert Xue
9044*dc5640d1SHerbert Xue @since 4.0]]>
9045*dc5640d1SHerbert Xue      </doc>
9046*dc5640d1SHerbert Xue    </method>
9047*dc5640d1SHerbert Xue    <method name="visit" return="V"
9048*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9049*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9050*dc5640d1SHerbert Xue      deprecated="not deprecated">
9051*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
9052*dc5640d1SHerbert Xue      <doc>
9053*dc5640d1SHerbert Xue      <![CDATA[Visit a require explicit bindings command.
9054*dc5640d1SHerbert Xue
9055*dc5640d1SHerbert Xue @since 3.0]]>
9056*dc5640d1SHerbert Xue      </doc>
9057*dc5640d1SHerbert Xue    </method>
9058*dc5640d1SHerbert Xue    <method name="visit" return="V"
9059*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9060*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9061*dc5640d1SHerbert Xue      deprecated="not deprecated">
9062*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
9063*dc5640d1SHerbert Xue      <doc>
9064*dc5640d1SHerbert Xue      <![CDATA[Visit a disable circular proxies command.
9065*dc5640d1SHerbert Xue
9066*dc5640d1SHerbert Xue @since 3.0]]>
9067*dc5640d1SHerbert Xue      </doc>
9068*dc5640d1SHerbert Xue    </method>
9069*dc5640d1SHerbert Xue    <method name="visit" return="V"
9070*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9071*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9072*dc5640d1SHerbert Xue      deprecated="not deprecated">
9073*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
9074*dc5640d1SHerbert Xue      <doc>
9075*dc5640d1SHerbert Xue      <![CDATA[Visit a require explicit {@literal @}{@link Inject} command.
9076*dc5640d1SHerbert Xue
9077*dc5640d1SHerbert Xue @since 4.0]]>
9078*dc5640d1SHerbert Xue      </doc>
9079*dc5640d1SHerbert Xue    </method>
9080*dc5640d1SHerbert Xue    <method name="visit" return="V"
9081*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9082*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9083*dc5640d1SHerbert Xue      deprecated="not deprecated">
9084*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
9085*dc5640d1SHerbert Xue      <doc>
9086*dc5640d1SHerbert Xue      <![CDATA[Visit a require exact binding annotations command.
9087*dc5640d1SHerbert Xue
9088*dc5640d1SHerbert Xue @since 4.0]]>
9089*dc5640d1SHerbert Xue      </doc>
9090*dc5640d1SHerbert Xue    </method>
9091*dc5640d1SHerbert Xue    <method name="visit" return="V"
9092*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9093*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9094*dc5640d1SHerbert Xue      deprecated="not deprecated">
9095*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
9096*dc5640d1SHerbert Xue      <doc>
9097*dc5640d1SHerbert Xue      <![CDATA[Visits a {@link Binder#scanModulesForAnnotatedMethods} command.
9098*dc5640d1SHerbert Xue
9099*dc5640d1SHerbert Xue @since 4.0]]>
9100*dc5640d1SHerbert Xue      </doc>
9101*dc5640d1SHerbert Xue    </method>
9102*dc5640d1SHerbert Xue    <doc>
9103*dc5640d1SHerbert Xue    <![CDATA[Visit elements.
9104*dc5640d1SHerbert Xue
9105*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
9106*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
9107*dc5640d1SHerbert Xue
9108*dc5640d1SHerbert Xue @since 2.0]]>
9109*dc5640d1SHerbert Xue    </doc>
9110*dc5640d1SHerbert Xue  </interface>
9111*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ElementVisitor -->
9112*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ExposedBinding -->
9113*dc5640d1SHerbert Xue  <interface name="ExposedBinding"    abstract="true"
9114*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9115*dc5640d1SHerbert Xue    deprecated="not deprecated">
9116*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9117*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9118*dc5640d1SHerbert Xue    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
9119*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9120*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9121*dc5640d1SHerbert Xue      deprecated="not deprecated">
9122*dc5640d1SHerbert Xue      <doc>
9123*dc5640d1SHerbert Xue      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
9124*dc5640d1SHerbert Xue      </doc>
9125*dc5640d1SHerbert Xue    </method>
9126*dc5640d1SHerbert Xue    <method name="applyTo"
9127*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9128*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9129*dc5640d1SHerbert Xue      deprecated="not deprecated">
9130*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9131*dc5640d1SHerbert Xue      <doc>
9132*dc5640d1SHerbert Xue      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
9133*dc5640d1SHerbert Xue      </doc>
9134*dc5640d1SHerbert Xue    </method>
9135*dc5640d1SHerbert Xue    <doc>
9136*dc5640d1SHerbert Xue    <![CDATA[A binding to a key exposed from an enclosed private environment.
9137*dc5640d1SHerbert Xue
9138*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9139*dc5640d1SHerbert Xue @since 2.0]]>
9140*dc5640d1SHerbert Xue    </doc>
9141*dc5640d1SHerbert Xue  </interface>
9142*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ExposedBinding -->
9143*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.HasDependencies -->
9144*dc5640d1SHerbert Xue  <interface name="HasDependencies"    abstract="true"
9145*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9146*dc5640d1SHerbert Xue    deprecated="not deprecated">
9147*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9148*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9149*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9150*dc5640d1SHerbert Xue      deprecated="not deprecated">
9151*dc5640d1SHerbert Xue      <doc>
9152*dc5640d1SHerbert Xue      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
9153*dc5640d1SHerbert Xue known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
9154*dc5640d1SHerbert Xue included in the returned set.
9155*dc5640d1SHerbert Xue
9156*dc5640d1SHerbert Xue @return a possibly empty set]]>
9157*dc5640d1SHerbert Xue      </doc>
9158*dc5640d1SHerbert Xue    </method>
9159*dc5640d1SHerbert Xue    <doc>
9160*dc5640d1SHerbert Xue    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
9161*dc5640d1SHerbert Xue providers} and instances that expose their dependencies explicitly.
9162*dc5640d1SHerbert Xue
9163*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9164*dc5640d1SHerbert Xue @since 2.0]]>
9165*dc5640d1SHerbert Xue    </doc>
9166*dc5640d1SHerbert Xue  </interface>
9167*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.HasDependencies -->
9168*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InjectionListener -->
9169*dc5640d1SHerbert Xue  <interface name="InjectionListener"    abstract="true"
9170*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9171*dc5640d1SHerbert Xue    deprecated="not deprecated">
9172*dc5640d1SHerbert Xue    <method name="afterInjection"
9173*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9174*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9175*dc5640d1SHerbert Xue      deprecated="not deprecated">
9176*dc5640d1SHerbert Xue      <param name="injectee" type="I"/>
9177*dc5640d1SHerbert Xue      <doc>
9178*dc5640d1SHerbert Xue      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
9179*dc5640d1SHerbert Xue
9180*dc5640d1SHerbert Xue @param injectee instance that Guice injected dependencies into]]>
9181*dc5640d1SHerbert Xue      </doc>
9182*dc5640d1SHerbert Xue    </method>
9183*dc5640d1SHerbert Xue    <doc>
9184*dc5640d1SHerbert Xue    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
9185*dc5640d1SHerbert Xue injections, post-injection initialization, and more.
9186*dc5640d1SHerbert Xue
9187*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9188*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9189*dc5640d1SHerbert Xue @since 2.0]]>
9190*dc5640d1SHerbert Xue    </doc>
9191*dc5640d1SHerbert Xue  </interface>
9192*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InjectionListener -->
9193*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionPoint -->
9194*dc5640d1SHerbert Xue  <class name="InjectionPoint" extends="java.lang.Object"
9195*dc5640d1SHerbert Xue    abstract="false"
9196*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9197*dc5640d1SHerbert Xue    deprecated="not deprecated">
9198*dc5640d1SHerbert Xue    <method name="getMember" return="java.lang.reflect.Member"
9199*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9200*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9201*dc5640d1SHerbert Xue      deprecated="not deprecated">
9202*dc5640d1SHerbert Xue      <doc>
9203*dc5640d1SHerbert Xue      <![CDATA[Returns the injected constructor, field, or method.]]>
9204*dc5640d1SHerbert Xue      </doc>
9205*dc5640d1SHerbert Xue    </method>
9206*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9207*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9208*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9209*dc5640d1SHerbert Xue      deprecated="not deprecated">
9210*dc5640d1SHerbert Xue      <doc>
9211*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
9212*dc5640d1SHerbert Xue constructor, the dependencies will correspond to that member's parameters. Field injection
9213*dc5640d1SHerbert Xue points always have a single dependency for the field itself.
9214*dc5640d1SHerbert Xue
9215*dc5640d1SHerbert Xue @return a possibly-empty list]]>
9216*dc5640d1SHerbert Xue      </doc>
9217*dc5640d1SHerbert Xue    </method>
9218*dc5640d1SHerbert Xue    <method name="isOptional" return="boolean"
9219*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9220*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9221*dc5640d1SHerbert Xue      deprecated="not deprecated">
9222*dc5640d1SHerbert Xue      <doc>
9223*dc5640d1SHerbert Xue      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
9224*dc5640d1SHerbert Xue for all required dependencies. Both explicit bindings (as specified in a module), and implicit
9225*dc5640d1SHerbert Xue bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
9226*dc5640d1SHerbert Xue constructors etc.) may be used to satisfy optional injection points.]]>
9227*dc5640d1SHerbert Xue      </doc>
9228*dc5640d1SHerbert Xue    </method>
9229*dc5640d1SHerbert Xue    <method name="isToolable" return="boolean"
9230*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9231*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9232*dc5640d1SHerbert Xue      deprecated="not deprecated">
9233*dc5640d1SHerbert Xue      <doc>
9234*dc5640d1SHerbert Xue      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
9235*dc5640d1SHerbert Xue
9236*dc5640d1SHerbert Xue @since 3.0]]>
9237*dc5640d1SHerbert Xue      </doc>
9238*dc5640d1SHerbert Xue    </method>
9239*dc5640d1SHerbert Xue    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
9240*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9241*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9242*dc5640d1SHerbert Xue      deprecated="not deprecated">
9243*dc5640d1SHerbert Xue      <doc>
9244*dc5640d1SHerbert Xue      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
9245*dc5640d1SHerbert Xue parameterized type, the result will include more type information than the member's {@link
9246*dc5640d1SHerbert Xue Member#getDeclaringClass() raw declaring class}.
9247*dc5640d1SHerbert Xue
9248*dc5640d1SHerbert Xue @since 3.0]]>
9249*dc5640d1SHerbert Xue      </doc>
9250*dc5640d1SHerbert Xue    </method>
9251*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
9252*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9253*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9254*dc5640d1SHerbert Xue      deprecated="not deprecated">
9255*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
9256*dc5640d1SHerbert Xue    </method>
9257*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
9258*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9259*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9260*dc5640d1SHerbert Xue      deprecated="not deprecated">
9261*dc5640d1SHerbert Xue    </method>
9262*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9263*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9264*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9265*dc5640d1SHerbert Xue      deprecated="not deprecated">
9266*dc5640d1SHerbert Xue    </method>
9267*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9268*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9269*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9270*dc5640d1SHerbert Xue      deprecated="not deprecated">
9271*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9272*dc5640d1SHerbert Xue      <doc>
9273*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
9274*dc5640d1SHerbert Xue constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
9275*dc5640d1SHerbert Xue type literal.
9276*dc5640d1SHerbert Xue
9277*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
9278*dc5640d1SHerbert Xue
9279*dc5640d1SHerbert Xue @since 3.0]]>
9280*dc5640d1SHerbert Xue      </doc>
9281*dc5640d1SHerbert Xue    </method>
9282*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9283*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9284*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9285*dc5640d1SHerbert Xue      deprecated="not deprecated">
9286*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9287*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
9288*dc5640d1SHerbert Xue      <doc>
9289*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
9290*dc5640d1SHerbert Xue
9291*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
9292*dc5640d1SHerbert Xue @param type the concrete type that defines {@code constructor}.
9293*dc5640d1SHerbert Xue
9294*dc5640d1SHerbert Xue @since 3.0]]>
9295*dc5640d1SHerbert Xue      </doc>
9296*dc5640d1SHerbert Xue    </method>
9297*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9298*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9299*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9300*dc5640d1SHerbert Xue      deprecated="not deprecated">
9301*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9302*dc5640d1SHerbert Xue      <doc>
9303*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9304*dc5640d1SHerbert Xue
9305*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9306*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
9307*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
9308*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
9309*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
9310*dc5640d1SHerbert Xue      </doc>
9311*dc5640d1SHerbert Xue    </method>
9312*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9313*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9314*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9315*dc5640d1SHerbert Xue      deprecated="not deprecated">
9316*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9317*dc5640d1SHerbert Xue      <doc>
9318*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9319*dc5640d1SHerbert Xue
9320*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9321*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
9322*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
9323*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
9324*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
9325*dc5640d1SHerbert Xue      </doc>
9326*dc5640d1SHerbert Xue    </method>
9327*dc5640d1SHerbert Xue    <method name="forMethod" return="com.google.inject.spi.InjectionPoint"
9328*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9329*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9330*dc5640d1SHerbert Xue      deprecated="not deprecated">
9331*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
9332*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9333*dc5640d1SHerbert Xue      <doc>
9334*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified method of {@code type}.
9335*dc5640d1SHerbert Xue This is useful for extensions that need to build dependency graphs from
9336*dc5640d1SHerbert Xue arbitrary methods.
9337*dc5640d1SHerbert Xue
9338*dc5640d1SHerbert Xue @param method any single method present on {@code type}.
9339*dc5640d1SHerbert Xue @param type the concrete type that defines {@code method}.
9340*dc5640d1SHerbert Xue
9341*dc5640d1SHerbert Xue @since 4.0]]>
9342*dc5640d1SHerbert Xue      </doc>
9343*dc5640d1SHerbert Xue    </method>
9344*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9345*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9346*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9347*dc5640d1SHerbert Xue      deprecated="not deprecated">
9348*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9349*dc5640d1SHerbert Xue      <doc>
9350*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
9351*dc5640d1SHerbert Xue
9352*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9353*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9354*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9355*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9356*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9357*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9358*dc5640d1SHerbert Xue      of the valid injection points.]]>
9359*dc5640d1SHerbert Xue      </doc>
9360*dc5640d1SHerbert Xue    </method>
9361*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9362*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9363*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9364*dc5640d1SHerbert Xue      deprecated="not deprecated">
9365*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9366*dc5640d1SHerbert Xue      <doc>
9367*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
9368*dc5640d1SHerbert Xue
9369*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9370*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9371*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9372*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9373*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9374*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9375*dc5640d1SHerbert Xue      of the valid injection points.]]>
9376*dc5640d1SHerbert Xue      </doc>
9377*dc5640d1SHerbert Xue    </method>
9378*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9379*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9380*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9381*dc5640d1SHerbert Xue      deprecated="not deprecated">
9382*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9383*dc5640d1SHerbert Xue      <doc>
9384*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
9385*dc5640d1SHerbert Xue
9386*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9387*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9388*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9389*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9390*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9391*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9392*dc5640d1SHerbert Xue      of the valid injection points.]]>
9393*dc5640d1SHerbert Xue      </doc>
9394*dc5640d1SHerbert Xue    </method>
9395*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9396*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9397*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9398*dc5640d1SHerbert Xue      deprecated="not deprecated">
9399*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9400*dc5640d1SHerbert Xue      <doc>
9401*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
9402*dc5640d1SHerbert Xue
9403*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9404*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9405*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9406*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9407*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9408*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9409*dc5640d1SHerbert Xue      of the valid injection points.]]>
9410*dc5640d1SHerbert Xue      </doc>
9411*dc5640d1SHerbert Xue    </method>
9412*dc5640d1SHerbert Xue    <doc>
9413*dc5640d1SHerbert Xue    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
9414*dc5640d1SHerbert Xue {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
9415*dc5640d1SHerbert Xue omit the annotation.
9416*dc5640d1SHerbert Xue
9417*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9418*dc5640d1SHerbert Xue @since 2.0]]>
9419*dc5640d1SHerbert Xue    </doc>
9420*dc5640d1SHerbert Xue  </class>
9421*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionPoint -->
9422*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionRequest -->
9423*dc5640d1SHerbert Xue  <class name="InjectionRequest" extends="java.lang.Object"
9424*dc5640d1SHerbert Xue    abstract="false"
9425*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9426*dc5640d1SHerbert Xue    deprecated="not deprecated">
9427*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9428*dc5640d1SHerbert Xue    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
9429*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9430*dc5640d1SHerbert Xue      deprecated="not deprecated">
9431*dc5640d1SHerbert Xue    </constructor>
9432*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9433*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9434*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9435*dc5640d1SHerbert Xue      deprecated="not deprecated">
9436*dc5640d1SHerbert Xue    </method>
9437*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
9438*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9439*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9440*dc5640d1SHerbert Xue      deprecated="not deprecated">
9441*dc5640d1SHerbert Xue    </method>
9442*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9443*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9444*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9445*dc5640d1SHerbert Xue      deprecated="not deprecated">
9446*dc5640d1SHerbert Xue    </method>
9447*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9448*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9449*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9450*dc5640d1SHerbert Xue      deprecated="not deprecated">
9451*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9452*dc5640d1SHerbert Xue      <doc>
9453*dc5640d1SHerbert Xue      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
9454*dc5640d1SHerbert Xue this request.
9455*dc5640d1SHerbert Xue
9456*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9457*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9458*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9459*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on the class of {@code
9460*dc5640d1SHerbert Xue      instance}, such as a field with multiple binding annotations. The exception's {@link
9461*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9462*dc5640d1SHerbert Xue      of the valid injection points.]]>
9463*dc5640d1SHerbert Xue      </doc>
9464*dc5640d1SHerbert Xue    </method>
9465*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="R"
9466*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9467*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9468*dc5640d1SHerbert Xue      deprecated="not deprecated">
9469*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
9470*dc5640d1SHerbert Xue    </method>
9471*dc5640d1SHerbert Xue    <method name="applyTo"
9472*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9473*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9474*dc5640d1SHerbert Xue      deprecated="not deprecated">
9475*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9476*dc5640d1SHerbert Xue    </method>
9477*dc5640d1SHerbert Xue    <doc>
9478*dc5640d1SHerbert Xue    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
9479*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
9480*dc5640d1SHerbert Xue requestInjection()} statements:
9481*dc5640d1SHerbert Xue <pre>
9482*dc5640d1SHerbert Xue     requestInjection(serviceInstance);</pre>
9483*dc5640d1SHerbert Xue
9484*dc5640d1SHerbert Xue @author [email protected] (Mike Ward)
9485*dc5640d1SHerbert Xue @since 2.0]]>
9486*dc5640d1SHerbert Xue    </doc>
9487*dc5640d1SHerbert Xue  </class>
9488*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionRequest -->
9489*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InstanceBinding -->
9490*dc5640d1SHerbert Xue  <interface name="InstanceBinding"    abstract="true"
9491*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9492*dc5640d1SHerbert Xue    deprecated="not deprecated">
9493*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9494*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9495*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
9496*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9497*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9498*dc5640d1SHerbert Xue      deprecated="not deprecated">
9499*dc5640d1SHerbert Xue      <doc>
9500*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied instance.]]>
9501*dc5640d1SHerbert Xue      </doc>
9502*dc5640d1SHerbert Xue    </method>
9503*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9504*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9505*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9506*dc5640d1SHerbert Xue      deprecated="not deprecated">
9507*dc5640d1SHerbert Xue      <doc>
9508*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
9509*dc5640d1SHerbert Xue time only.
9510*dc5640d1SHerbert Xue
9511*dc5640d1SHerbert Xue @return a possibly empty set]]>
9512*dc5640d1SHerbert Xue      </doc>
9513*dc5640d1SHerbert Xue    </method>
9514*dc5640d1SHerbert Xue    <doc>
9515*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
9516*dc5640d1SHerbert Xue
9517*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9518*dc5640d1SHerbert Xue @since 2.0]]>
9519*dc5640d1SHerbert Xue    </doc>
9520*dc5640d1SHerbert Xue  </interface>
9521*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InstanceBinding -->
9522*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InterceptorBinding -->
9523*dc5640d1SHerbert Xue  <class name="InterceptorBinding" extends="java.lang.Object"
9524*dc5640d1SHerbert Xue    abstract="false"
9525*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9526*dc5640d1SHerbert Xue    deprecated="not deprecated">
9527*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9528*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9529*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9530*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9531*dc5640d1SHerbert Xue      deprecated="not deprecated">
9532*dc5640d1SHerbert Xue    </method>
9533*dc5640d1SHerbert Xue    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
9534*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9535*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9536*dc5640d1SHerbert Xue      deprecated="not deprecated">
9537*dc5640d1SHerbert Xue    </method>
9538*dc5640d1SHerbert Xue    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
9539*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9540*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9541*dc5640d1SHerbert Xue      deprecated="not deprecated">
9542*dc5640d1SHerbert Xue    </method>
9543*dc5640d1SHerbert Xue    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
9544*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9545*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9546*dc5640d1SHerbert Xue      deprecated="not deprecated">
9547*dc5640d1SHerbert Xue    </method>
9548*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9549*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9550*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9551*dc5640d1SHerbert Xue      deprecated="not deprecated">
9552*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9553*dc5640d1SHerbert Xue    </method>
9554*dc5640d1SHerbert Xue    <method name="applyTo"
9555*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9556*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9557*dc5640d1SHerbert Xue      deprecated="not deprecated">
9558*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9559*dc5640d1SHerbert Xue    </method>
9560*dc5640d1SHerbert Xue    <doc>
9561*dc5640d1SHerbert Xue    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
9562*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
9563*dc5640d1SHerbert Xue Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
9564*dc5640d1SHerbert Xue <pre>
9565*dc5640d1SHerbert Xue     bindInterceptor(Matchers.subclassesOf(MyAction.class),
9566*dc5640d1SHerbert Xue         Matchers.annotatedWith(Transactional.class),
9567*dc5640d1SHerbert Xue         new MyTransactionInterceptor());</pre>
9568*dc5640d1SHerbert Xue
9569*dc5640d1SHerbert Xue or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
9570*dc5640d1SHerbert Xue org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
9571*dc5640d1SHerbert Xue
9572*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9573*dc5640d1SHerbert Xue @since 2.0]]>
9574*dc5640d1SHerbert Xue    </doc>
9575*dc5640d1SHerbert Xue  </class>
9576*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InterceptorBinding -->
9577*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
9578*dc5640d1SHerbert Xue  <interface name="LinkedKeyBinding"    abstract="true"
9579*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9580*dc5640d1SHerbert Xue    deprecated="not deprecated">
9581*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9582*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
9583*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9584*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9585*dc5640d1SHerbert Xue      deprecated="not deprecated">
9586*dc5640d1SHerbert Xue      <doc>
9587*dc5640d1SHerbert Xue      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
9588*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
9589*dc5640d1SHerbert Xue      </doc>
9590*dc5640d1SHerbert Xue    </method>
9591*dc5640d1SHerbert Xue    <doc>
9592*dc5640d1SHerbert Xue    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
9593*dc5640d1SHerbert Xue
9594*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9595*dc5640d1SHerbert Xue @since 2.0]]>
9596*dc5640d1SHerbert Xue    </doc>
9597*dc5640d1SHerbert Xue  </interface>
9598*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
9599*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
9600*dc5640d1SHerbert Xue  <class name="MembersInjectorLookup" extends="java.lang.Object"
9601*dc5640d1SHerbert Xue    abstract="false"
9602*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9603*dc5640d1SHerbert Xue    deprecated="not deprecated">
9604*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9605*dc5640d1SHerbert Xue    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
9606*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9607*dc5640d1SHerbert Xue      deprecated="not deprecated">
9608*dc5640d1SHerbert Xue    </constructor>
9609*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9610*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9611*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9612*dc5640d1SHerbert Xue      deprecated="not deprecated">
9613*dc5640d1SHerbert Xue    </method>
9614*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9615*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9616*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9617*dc5640d1SHerbert Xue      deprecated="not deprecated">
9618*dc5640d1SHerbert Xue      <doc>
9619*dc5640d1SHerbert Xue      <![CDATA[Gets the type containing the members to be injected.]]>
9620*dc5640d1SHerbert Xue      </doc>
9621*dc5640d1SHerbert Xue    </method>
9622*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9623*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9624*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9625*dc5640d1SHerbert Xue      deprecated="not deprecated">
9626*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9627*dc5640d1SHerbert Xue    </method>
9628*dc5640d1SHerbert Xue    <method name="initializeDelegate"
9629*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9630*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9631*dc5640d1SHerbert Xue      deprecated="not deprecated">
9632*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
9633*dc5640d1SHerbert Xue      <doc>
9634*dc5640d1SHerbert Xue      <![CDATA[Sets the actual members injector.
9635*dc5640d1SHerbert Xue
9636*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
9637*dc5640d1SHerbert Xue      </doc>
9638*dc5640d1SHerbert Xue    </method>
9639*dc5640d1SHerbert Xue    <method name="applyTo"
9640*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9641*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9642*dc5640d1SHerbert Xue      deprecated="not deprecated">
9643*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9644*dc5640d1SHerbert Xue    </method>
9645*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
9646*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9647*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9648*dc5640d1SHerbert Xue      deprecated="not deprecated">
9649*dc5640d1SHerbert Xue      <doc>
9650*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
9651*dc5640d1SHerbert Xue The delegate will be initialized when this element is processed, or otherwise used to create
9652*dc5640d1SHerbert Xue an injector.]]>
9653*dc5640d1SHerbert Xue      </doc>
9654*dc5640d1SHerbert Xue    </method>
9655*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9656*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9657*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9658*dc5640d1SHerbert Xue      deprecated="not deprecated">
9659*dc5640d1SHerbert Xue      <doc>
9660*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
9661*dc5640d1SHerbert Xue initialized, which usually happens when the injector is created. The members injector will
9662*dc5640d1SHerbert Xue throw an {@code IllegalStateException} if you try to use it beforehand.]]>
9663*dc5640d1SHerbert Xue      </doc>
9664*dc5640d1SHerbert Xue    </method>
9665*dc5640d1SHerbert Xue    <doc>
9666*dc5640d1SHerbert Xue    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
9667*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
9668*dc5640d1SHerbert Xue <pre>
9669*dc5640d1SHerbert Xue     MembersInjector&lt;PaymentService&gt; membersInjector
9670*dc5640d1SHerbert Xue         = getMembersInjector(PaymentService.class);</pre>
9671*dc5640d1SHerbert Xue
9672*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9673*dc5640d1SHerbert Xue @since 2.0]]>
9674*dc5640d1SHerbert Xue    </doc>
9675*dc5640d1SHerbert Xue  </class>
9676*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
9677*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Message -->
9678*dc5640d1SHerbert Xue  <class name="Message" extends="java.lang.Object"
9679*dc5640d1SHerbert Xue    abstract="false"
9680*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9681*dc5640d1SHerbert Xue    deprecated="not deprecated">
9682*dc5640d1SHerbert Xue    <implements name="java.io.Serializable"/>
9683*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9684*dc5640d1SHerbert Xue    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
9685*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9686*dc5640d1SHerbert Xue      deprecated="not deprecated">
9687*dc5640d1SHerbert Xue      <doc>
9688*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9689*dc5640d1SHerbert Xue      </doc>
9690*dc5640d1SHerbert Xue    </constructor>
9691*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.String, java.lang.Throwable"
9692*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9693*dc5640d1SHerbert Xue      deprecated="not deprecated">
9694*dc5640d1SHerbert Xue      <doc>
9695*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
9696*dc5640d1SHerbert Xue      </doc>
9697*dc5640d1SHerbert Xue    </constructor>
9698*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.Object, java.lang.String"
9699*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9700*dc5640d1SHerbert Xue      deprecated="not deprecated">
9701*dc5640d1SHerbert Xue    </constructor>
9702*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.String"
9703*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9704*dc5640d1SHerbert Xue      deprecated="not deprecated">
9705*dc5640d1SHerbert Xue    </constructor>
9706*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
9707*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9708*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9709*dc5640d1SHerbert Xue      deprecated="not deprecated">
9710*dc5640d1SHerbert Xue    </method>
9711*dc5640d1SHerbert Xue    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
9712*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9713*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9714*dc5640d1SHerbert Xue      deprecated="not deprecated">
9715*dc5640d1SHerbert Xue      <doc>
9716*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9717*dc5640d1SHerbert Xue      </doc>
9718*dc5640d1SHerbert Xue    </method>
9719*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
9720*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9721*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9722*dc5640d1SHerbert Xue      deprecated="not deprecated">
9723*dc5640d1SHerbert Xue      <doc>
9724*dc5640d1SHerbert Xue      <![CDATA[Gets the error message text.]]>
9725*dc5640d1SHerbert Xue      </doc>
9726*dc5640d1SHerbert Xue    </method>
9727*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9728*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9729*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9730*dc5640d1SHerbert Xue      deprecated="not deprecated">
9731*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9732*dc5640d1SHerbert Xue      <doc>
9733*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9734*dc5640d1SHerbert Xue      </doc>
9735*dc5640d1SHerbert Xue    </method>
9736*dc5640d1SHerbert Xue    <method name="getCause" return="java.lang.Throwable"
9737*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9738*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9739*dc5640d1SHerbert Xue      deprecated="not deprecated">
9740*dc5640d1SHerbert Xue      <doc>
9741*dc5640d1SHerbert Xue      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
9742*dc5640d1SHerbert Xue message was not caused by a throwable.
9743*dc5640d1SHerbert Xue
9744*dc5640d1SHerbert Xue @since 2.0]]>
9745*dc5640d1SHerbert Xue      </doc>
9746*dc5640d1SHerbert Xue    </method>
9747*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9748*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9749*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9750*dc5640d1SHerbert Xue      deprecated="not deprecated">
9751*dc5640d1SHerbert Xue    </method>
9752*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
9753*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9754*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9755*dc5640d1SHerbert Xue      deprecated="not deprecated">
9756*dc5640d1SHerbert Xue    </method>
9757*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
9758*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9759*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9760*dc5640d1SHerbert Xue      deprecated="not deprecated">
9761*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
9762*dc5640d1SHerbert Xue    </method>
9763*dc5640d1SHerbert Xue    <method name="applyTo"
9764*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9765*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9766*dc5640d1SHerbert Xue      deprecated="not deprecated">
9767*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9768*dc5640d1SHerbert Xue      <doc>
9769*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9770*dc5640d1SHerbert Xue      </doc>
9771*dc5640d1SHerbert Xue    </method>
9772*dc5640d1SHerbert Xue    <doc>
9773*dc5640d1SHerbert Xue    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
9774*dc5640d1SHerbert Xue Guice and its extensions. Messages can be created explicitly in a module using {@link
9775*dc5640d1SHerbert Xue com.google.inject.Binder#addError(Throwable) addError()} statements:
9776*dc5640d1SHerbert Xue <pre>
9777*dc5640d1SHerbert Xue     try {
9778*dc5640d1SHerbert Xue       bindPropertiesFromFile();
9779*dc5640d1SHerbert Xue     } catch (IOException e) {
9780*dc5640d1SHerbert Xue       addError(e);
9781*dc5640d1SHerbert Xue     }</pre>
9782*dc5640d1SHerbert Xue
9783*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
9784*dc5640d1SHerbert Xue    </doc>
9785*dc5640d1SHerbert Xue  </class>
9786*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Message -->
9787*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9788*dc5640d1SHerbert Xue  <class name="ModuleAnnotatedMethodScanner" extends="java.lang.Object"
9789*dc5640d1SHerbert Xue    abstract="true"
9790*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9791*dc5640d1SHerbert Xue    deprecated="not deprecated">
9792*dc5640d1SHerbert Xue    <constructor name="ModuleAnnotatedMethodScanner"
9793*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9794*dc5640d1SHerbert Xue      deprecated="not deprecated">
9795*dc5640d1SHerbert Xue    </constructor>
9796*dc5640d1SHerbert Xue    <method name="annotationClasses" return="java.util.Set&lt;? extends java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&gt;"
9797*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9798*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9799*dc5640d1SHerbert Xue      deprecated="not deprecated">
9800*dc5640d1SHerbert Xue      <doc>
9801*dc5640d1SHerbert Xue      <![CDATA[Returns the annotations this should scan for. Every method in the module that has one of these
9802*dc5640d1SHerbert Xue annotations will create a Provider binding, with the return value of the binding being what's
9803*dc5640d1SHerbert Xue provided and the parameters of the method being dependencies of the provider.]]>
9804*dc5640d1SHerbert Xue      </doc>
9805*dc5640d1SHerbert Xue    </method>
9806*dc5640d1SHerbert Xue    <method name="prepareMethod" return="com.google.inject.Key&lt;T&gt;"
9807*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9808*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9809*dc5640d1SHerbert Xue      deprecated="not deprecated">
9810*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9811*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
9812*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9813*dc5640d1SHerbert Xue      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
9814*dc5640d1SHerbert Xue      <doc>
9815*dc5640d1SHerbert Xue      <![CDATA[Prepares a method for binding. This {@code key} parameter is the key discovered from looking at
9816*dc5640d1SHerbert Xue the binding annotation and return value of the method. Implementations can modify the key to
9817*dc5640d1SHerbert Xue instead bind to another key. For example, Multibinder may want to change
9818*dc5640d1SHerbert Xue {@code @SetProvides String provideFoo()} to bind into a unique Key within the multibinder
9819*dc5640d1SHerbert Xue instead of binding {@code String}.
9820*dc5640d1SHerbert Xue
9821*dc5640d1SHerbert Xue <p>The injection point and annotation are provided in case the implementation wants to set the
9822*dc5640d1SHerbert Xue key based on the property of the annotation or if any additional preparation is needed for any
9823*dc5640d1SHerbert Xue of the dependencies. The annotation is guaranteed to be an instance of one the classes returned
9824*dc5640d1SHerbert Xue by {@link #annotationClasses}.]]>
9825*dc5640d1SHerbert Xue      </doc>
9826*dc5640d1SHerbert Xue    </method>
9827*dc5640d1SHerbert Xue    <doc>
9828*dc5640d1SHerbert Xue    <![CDATA[Allows extensions to scan modules for annotated methods and bind those methods
9829*dc5640d1SHerbert Xue as providers, similar to {@code @Provides} methods.
9830*dc5640d1SHerbert Xue
9831*dc5640d1SHerbert Xue @since 4.0]]>
9832*dc5640d1SHerbert Xue    </doc>
9833*dc5640d1SHerbert Xue  </class>
9834*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9835*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9836*dc5640d1SHerbert Xue  <class name="ModuleAnnotatedMethodScannerBinding" extends="java.lang.Object"
9837*dc5640d1SHerbert Xue    abstract="false"
9838*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9839*dc5640d1SHerbert Xue    deprecated="not deprecated">
9840*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9841*dc5640d1SHerbert Xue    <constructor name="ModuleAnnotatedMethodScannerBinding" type="java.lang.Object, com.google.inject.spi.ModuleAnnotatedMethodScanner"
9842*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9843*dc5640d1SHerbert Xue      deprecated="not deprecated">
9844*dc5640d1SHerbert Xue    </constructor>
9845*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9846*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9847*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9848*dc5640d1SHerbert Xue      deprecated="not deprecated">
9849*dc5640d1SHerbert Xue    </method>
9850*dc5640d1SHerbert Xue    <method name="getScanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
9851*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9852*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9853*dc5640d1SHerbert Xue      deprecated="not deprecated">
9854*dc5640d1SHerbert Xue    </method>
9855*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9856*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9857*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9858*dc5640d1SHerbert Xue      deprecated="not deprecated">
9859*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9860*dc5640d1SHerbert Xue    </method>
9861*dc5640d1SHerbert Xue    <method name="applyTo"
9862*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9863*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9864*dc5640d1SHerbert Xue      deprecated="not deprecated">
9865*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9866*dc5640d1SHerbert Xue    </method>
9867*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9868*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9870*dc5640d1SHerbert Xue      deprecated="not deprecated">
9871*dc5640d1SHerbert Xue    </method>
9872*dc5640d1SHerbert Xue    <doc>
9873*dc5640d1SHerbert Xue    <![CDATA[Represents a call to {@link Binder#scanModulesForAnnotatedMethods} in a module.
9874*dc5640d1SHerbert Xue
9875*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
9876*dc5640d1SHerbert Xue @since 4.0]]>
9877*dc5640d1SHerbert Xue    </doc>
9878*dc5640d1SHerbert Xue  </class>
9879*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9880*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.PrivateElements -->
9881*dc5640d1SHerbert Xue  <interface name="PrivateElements"    abstract="true"
9882*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9883*dc5640d1SHerbert Xue    deprecated="not deprecated">
9884*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9885*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
9886*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9887*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9888*dc5640d1SHerbert Xue      deprecated="not deprecated">
9889*dc5640d1SHerbert Xue      <doc>
9890*dc5640d1SHerbert Xue      <![CDATA[Returns the configuration information in this private environment.]]>
9891*dc5640d1SHerbert Xue      </doc>
9892*dc5640d1SHerbert Xue    </method>
9893*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
9894*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9895*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9896*dc5640d1SHerbert Xue      deprecated="not deprecated">
9897*dc5640d1SHerbert Xue      <doc>
9898*dc5640d1SHerbert Xue      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
9899*dc5640d1SHerbert Xue been used to create an injector.]]>
9900*dc5640d1SHerbert Xue      </doc>
9901*dc5640d1SHerbert Xue    </method>
9902*dc5640d1SHerbert Xue    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
9903*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9904*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9905*dc5640d1SHerbert Xue      deprecated="not deprecated">
9906*dc5640d1SHerbert Xue      <doc>
9907*dc5640d1SHerbert Xue      <![CDATA[Returns the unique exposed keys for these private elements.]]>
9908*dc5640d1SHerbert Xue      </doc>
9909*dc5640d1SHerbert Xue    </method>
9910*dc5640d1SHerbert Xue    <method name="getExposedSource" return="java.lang.Object"
9911*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9912*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9913*dc5640d1SHerbert Xue      deprecated="not deprecated">
9914*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
9915*dc5640d1SHerbert Xue      <doc>
9916*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
9917*dc5640d1SHerbert Xue exposed. Used by Guice in the production of descriptive error messages.
9918*dc5640d1SHerbert Xue
9919*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
9920*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
9921*dc5640d1SHerbert Xue unfamiliar.
9922*dc5640d1SHerbert Xue
9923*dc5640d1SHerbert Xue @param key one of the keys exposed by this module.]]>
9924*dc5640d1SHerbert Xue      </doc>
9925*dc5640d1SHerbert Xue    </method>
9926*dc5640d1SHerbert Xue    <doc>
9927*dc5640d1SHerbert Xue    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
9928*dc5640d1SHerbert Xue default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
9929*dc5640d1SHerbert Xue
9930*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9931*dc5640d1SHerbert Xue @since 2.0]]>
9932*dc5640d1SHerbert Xue    </doc>
9933*dc5640d1SHerbert Xue  </interface>
9934*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.PrivateElements -->
9935*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderBinding -->
9936*dc5640d1SHerbert Xue  <interface name="ProviderBinding"    abstract="true"
9937*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9938*dc5640d1SHerbert Xue    deprecated="not deprecated">
9939*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9940*dc5640d1SHerbert Xue    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
9941*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9942*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9943*dc5640d1SHerbert Xue      deprecated="not deprecated">
9944*dc5640d1SHerbert Xue      <doc>
9945*dc5640d1SHerbert Xue      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
9946*dc5640d1SHerbert Xue can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
9947*dc5640d1SHerbert Xue Injector.getBinding(providedKey)}]]>
9948*dc5640d1SHerbert Xue      </doc>
9949*dc5640d1SHerbert Xue    </method>
9950*dc5640d1SHerbert Xue    <doc>
9951*dc5640d1SHerbert Xue    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
9952*dc5640d1SHerbert Xue is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
9953*dc5640d1SHerbert Xue
9954*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9955*dc5640d1SHerbert Xue @since 2.0]]>
9956*dc5640d1SHerbert Xue    </doc>
9957*dc5640d1SHerbert Xue  </interface>
9958*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderBinding -->
9959*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
9960*dc5640d1SHerbert Xue  <interface name="ProviderInstanceBinding"    abstract="true"
9961*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9962*dc5640d1SHerbert Xue    deprecated="not deprecated">
9963*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9964*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9965*dc5640d1SHerbert Xue    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
9966*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9967*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9968*dc5640d1SHerbert Xue      deprecated="Use {@link #getUserSuppliedProvider} instead.">
9969*dc5640d1SHerbert Xue      <doc>
9970*dc5640d1SHerbert Xue      <![CDATA[If the user supplied a JSR330 binding, then this will wrap that one. To always return the
9971*dc5640d1SHerbert Xue user-supplied provider, use {@link #getUserSuppliedProvider}.
9972*dc5640d1SHerbert Xue
9973*dc5640d1SHerbert Xue @deprecated Use {@link #getUserSuppliedProvider} instead.]]>
9974*dc5640d1SHerbert Xue      </doc>
9975*dc5640d1SHerbert Xue    </method>
9976*dc5640d1SHerbert Xue    <method name="getUserSuppliedProvider" return="javax.inject.Provider&lt;? extends T&gt;"
9977*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9978*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9979*dc5640d1SHerbert Xue      deprecated="not deprecated">
9980*dc5640d1SHerbert Xue      <doc>
9981*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied, unscoped provider.
9982*dc5640d1SHerbert Xue @since 4.0]]>
9983*dc5640d1SHerbert Xue      </doc>
9984*dc5640d1SHerbert Xue    </method>
9985*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9986*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9987*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9988*dc5640d1SHerbert Xue      deprecated="not deprecated">
9989*dc5640d1SHerbert Xue      <doc>
9990*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
9991*dc5640d1SHerbert Xue time only.
9992*dc5640d1SHerbert Xue
9993*dc5640d1SHerbert Xue @return a possibly empty set]]>
9994*dc5640d1SHerbert Xue      </doc>
9995*dc5640d1SHerbert Xue    </method>
9996*dc5640d1SHerbert Xue    <doc>
9997*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
9998*dc5640d1SHerbert Xue injections.
9999*dc5640d1SHerbert Xue
10000*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10001*dc5640d1SHerbert Xue @since 2.0]]>
10002*dc5640d1SHerbert Xue    </doc>
10003*dc5640d1SHerbert Xue  </interface>
10004*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
10005*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
10006*dc5640d1SHerbert Xue  <interface name="ProviderKeyBinding"    abstract="true"
10007*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10008*dc5640d1SHerbert Xue    deprecated="not deprecated">
10009*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10010*dc5640d1SHerbert Xue    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"
10011*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10012*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10013*dc5640d1SHerbert Xue      deprecated="not deprecated">
10014*dc5640d1SHerbert Xue      <doc>
10015*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
10016*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key)
10017*dc5640d1SHerbert Xue Injector.getBinding(providerKey)}]]>
10018*dc5640d1SHerbert Xue      </doc>
10019*dc5640d1SHerbert Xue    </method>
10020*dc5640d1SHerbert Xue    <doc>
10021*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
10022*dc5640d1SHerbert Xue provider's {@code get} method is invoked.
10023*dc5640d1SHerbert Xue
10024*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10025*dc5640d1SHerbert Xue @since 2.0]]>
10026*dc5640d1SHerbert Xue    </doc>
10027*dc5640d1SHerbert Xue  </interface>
10028*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
10029*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProviderLookup -->
10030*dc5640d1SHerbert Xue  <class name="ProviderLookup" extends="java.lang.Object"
10031*dc5640d1SHerbert Xue    abstract="false"
10032*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10033*dc5640d1SHerbert Xue    deprecated="not deprecated">
10034*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10035*dc5640d1SHerbert Xue    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
10036*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10037*dc5640d1SHerbert Xue      deprecated="not deprecated">
10038*dc5640d1SHerbert Xue    </constructor>
10039*dc5640d1SHerbert Xue    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.spi.Dependency&lt;T&gt;"
10040*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10041*dc5640d1SHerbert Xue      deprecated="not deprecated">
10042*dc5640d1SHerbert Xue      <doc>
10043*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
10044*dc5640d1SHerbert Xue      </doc>
10045*dc5640d1SHerbert Xue    </constructor>
10046*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10047*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10048*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10049*dc5640d1SHerbert Xue      deprecated="not deprecated">
10050*dc5640d1SHerbert Xue    </method>
10051*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10052*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10053*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10054*dc5640d1SHerbert Xue      deprecated="not deprecated">
10055*dc5640d1SHerbert Xue    </method>
10056*dc5640d1SHerbert Xue    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;T&gt;"
10057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10058*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10059*dc5640d1SHerbert Xue      deprecated="not deprecated">
10060*dc5640d1SHerbert Xue      <doc>
10061*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
10062*dc5640d1SHerbert Xue      </doc>
10063*dc5640d1SHerbert Xue    </method>
10064*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10065*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10066*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10067*dc5640d1SHerbert Xue      deprecated="not deprecated">
10068*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10069*dc5640d1SHerbert Xue    </method>
10070*dc5640d1SHerbert Xue    <method name="initializeDelegate"
10071*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10072*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10073*dc5640d1SHerbert Xue      deprecated="not deprecated">
10074*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
10075*dc5640d1SHerbert Xue      <doc>
10076*dc5640d1SHerbert Xue      <![CDATA[Sets the actual provider.
10077*dc5640d1SHerbert Xue
10078*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
10079*dc5640d1SHerbert Xue      </doc>
10080*dc5640d1SHerbert Xue    </method>
10081*dc5640d1SHerbert Xue    <method name="applyTo"
10082*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10083*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10084*dc5640d1SHerbert Xue      deprecated="not deprecated">
10085*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10086*dc5640d1SHerbert Xue    </method>
10087*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
10088*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10089*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10090*dc5640d1SHerbert Xue      deprecated="not deprecated">
10091*dc5640d1SHerbert Xue      <doc>
10092*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
10093*dc5640d1SHerbert Xue will be initialized when this element is processed, or otherwise used to create an injector.]]>
10094*dc5640d1SHerbert Xue      </doc>
10095*dc5640d1SHerbert Xue    </method>
10096*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10097*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10098*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10099*dc5640d1SHerbert Xue      deprecated="not deprecated">
10100*dc5640d1SHerbert Xue      <doc>
10101*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
10102*dc5640d1SHerbert Xue which usually happens when the injector is created. The provider will throw an {@code
10103*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.]]>
10104*dc5640d1SHerbert Xue      </doc>
10105*dc5640d1SHerbert Xue    </method>
10106*dc5640d1SHerbert Xue    <doc>
10107*dc5640d1SHerbert Xue    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
10108*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
10109*dc5640d1SHerbert Xue <pre>
10110*dc5640d1SHerbert Xue     Provider&lt;PaymentService&gt; paymentServiceProvider
10111*dc5640d1SHerbert Xue         = getProvider(PaymentService.class);</pre>
10112*dc5640d1SHerbert Xue
10113*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10114*dc5640d1SHerbert Xue @since 2.0]]>
10115*dc5640d1SHerbert Xue    </doc>
10116*dc5640d1SHerbert Xue  </class>
10117*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProviderLookup -->
10118*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
10119*dc5640d1SHerbert Xue  <interface name="ProviderWithDependencies"    abstract="true"
10120*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10121*dc5640d1SHerbert Xue    deprecated="not deprecated">
10122*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10123*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
10124*dc5640d1SHerbert Xue    <doc>
10125*dc5640d1SHerbert Xue    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
10126*dc5640d1SHerbert Xue aren't specified in injections, this interface should be used to expose all dependencies.
10127*dc5640d1SHerbert Xue
10128*dc5640d1SHerbert Xue @since 2.0]]>
10129*dc5640d1SHerbert Xue    </doc>
10130*dc5640d1SHerbert Xue  </interface>
10131*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
10132*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10133*dc5640d1SHerbert Xue  <interface name="ProviderWithExtensionVisitor"    abstract="true"
10134*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10135*dc5640d1SHerbert Xue    deprecated="not deprecated">
10136*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10137*dc5640d1SHerbert Xue    <method name="acceptExtensionVisitor" return="V"
10138*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10139*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10140*dc5640d1SHerbert Xue      deprecated="not deprecated">
10141*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
10142*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
10143*dc5640d1SHerbert Xue      <doc>
10144*dc5640d1SHerbert Xue      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
10145*dc5640d1SHerbert Xue extension visitor, and if so, visit it using that method. If the visitor is
10146*dc5640d1SHerbert Xue not an instance of the custom extension visitor, this method <b>MUST</b>
10147*dc5640d1SHerbert Xue call visitor.visit(binding).
10148*dc5640d1SHerbert Xue <p>
10149*dc5640d1SHerbert Xue Due to issues with generics, the type parameters of this method do not
10150*dc5640d1SHerbert Xue relate to the type of the provider. In practice, the 'B' type will always
10151*dc5640d1SHerbert Xue be a supertype of 'T'.]]>
10152*dc5640d1SHerbert Xue      </doc>
10153*dc5640d1SHerbert Xue    </method>
10154*dc5640d1SHerbert Xue    <doc>
10155*dc5640d1SHerbert Xue    <![CDATA[A Provider that is part of an extension which supports a custom
10156*dc5640d1SHerbert Xue BindingTargetVisitor.
10157*dc5640d1SHerbert Xue <p>
10158*dc5640d1SHerbert Xue When an extension binds a provider instance, the provider can implement this
10159*dc5640d1SHerbert Xue interface to allow users using the
10160*dc5640d1SHerbert Xue {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
10161*dc5640d1SHerbert Xue custom visitor designed for that extension. A typical implementation within
10162*dc5640d1SHerbert Xue the extension would look like
10163*dc5640d1SHerbert Xue <pre>
10164*dc5640d1SHerbert Xue &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
10165*dc5640d1SHerbert Xue   if(visitor instanceof MyCustomExtensionVisitor) {
10166*dc5640d1SHerbert Xue     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
10167*dc5640d1SHerbert Xue   } else {
10168*dc5640d1SHerbert Xue     return visitor.visit(binding);
10169*dc5640d1SHerbert Xue   }
10170*dc5640d1SHerbert Xue }</pre>
10171*dc5640d1SHerbert Xue 'MyCustomExtensionVisitor' in the example above would be an interface the
10172*dc5640d1SHerbert Xue extension provides that users can implement in order to be notified of custom
10173*dc5640d1SHerbert Xue extension information. These visitor interfaces must extend from
10174*dc5640d1SHerbert Xue BindingTargetVisitor.
10175*dc5640d1SHerbert Xue
10176*dc5640d1SHerbert Xue @since 3.0
10177*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10178*dc5640d1SHerbert Xue    </doc>
10179*dc5640d1SHerbert Xue  </interface>
10180*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10181*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvidesMethodBinding -->
10182*dc5640d1SHerbert Xue  <interface name="ProvidesMethodBinding"    abstract="true"
10183*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10184*dc5640d1SHerbert Xue    deprecated="not deprecated">
10185*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
10186*dc5640d1SHerbert Xue    <method name="getMethod" return="java.lang.reflect.Method"
10187*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10188*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10189*dc5640d1SHerbert Xue      deprecated="not deprecated">
10190*dc5640d1SHerbert Xue      <doc>
10191*dc5640d1SHerbert Xue      <![CDATA[Returns the method this binding uses.]]>
10192*dc5640d1SHerbert Xue      </doc>
10193*dc5640d1SHerbert Xue    </method>
10194*dc5640d1SHerbert Xue    <method name="getEnclosingInstance" return="java.lang.Object"
10195*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10196*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10197*dc5640d1SHerbert Xue      deprecated="not deprecated">
10198*dc5640d1SHerbert Xue      <doc>
10199*dc5640d1SHerbert Xue      <![CDATA[Returns the instance of the object the method is defined in.]]>
10200*dc5640d1SHerbert Xue      </doc>
10201*dc5640d1SHerbert Xue    </method>
10202*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10203*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10204*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10205*dc5640d1SHerbert Xue      deprecated="not deprecated">
10206*dc5640d1SHerbert Xue      <doc>
10207*dc5640d1SHerbert Xue      <![CDATA[Returns the key of the binding.]]>
10208*dc5640d1SHerbert Xue      </doc>
10209*dc5640d1SHerbert Xue    </method>
10210*dc5640d1SHerbert Xue    <method name="getAnnotation" return="java.lang.annotation.Annotation"
10211*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10212*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10213*dc5640d1SHerbert Xue      deprecated="not deprecated">
10214*dc5640d1SHerbert Xue      <doc>
10215*dc5640d1SHerbert Xue      <![CDATA[Returns the annotation that caused this binding to be created. For {@code @Provides} methods,
10216*dc5640d1SHerbert Xue this is an instance of the {@code @Provides} annotation. For bindings from
10217*dc5640d1SHerbert Xue {@link ModuleAnnotatedMethodScanner}, this is the annotation that caused the scanner to produce
10218*dc5640d1SHerbert Xue the binding.]]>
10219*dc5640d1SHerbert Xue      </doc>
10220*dc5640d1SHerbert Xue    </method>
10221*dc5640d1SHerbert Xue    <doc>
10222*dc5640d1SHerbert Xue    <![CDATA[An {@literal @}{@link Provides} binding or binding produced by a
10223*dc5640d1SHerbert Xue {@link ModuleAnnotatedMethodScanner}.
10224*dc5640d1SHerbert Xue
10225*dc5640d1SHerbert Xue @since 4.0
10226*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10227*dc5640d1SHerbert Xue    </doc>
10228*dc5640d1SHerbert Xue  </interface>
10229*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvidesMethodBinding -->
10230*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10231*dc5640d1SHerbert Xue  <interface name="ProvidesMethodTargetVisitor"    abstract="true"
10232*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10233*dc5640d1SHerbert Xue    deprecated="not deprecated">
10234*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
10235*dc5640d1SHerbert Xue    <method name="visit" return="V"
10236*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10237*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10238*dc5640d1SHerbert Xue      deprecated="not deprecated">
10239*dc5640d1SHerbert Xue      <param name="providesMethodBinding" type="com.google.inject.spi.ProvidesMethodBinding&lt;? extends T&gt;"/>
10240*dc5640d1SHerbert Xue      <doc>
10241*dc5640d1SHerbert Xue      <![CDATA[Visits an {@link ProvidesMethodBinding} created with an {@literal @}{@link Provides} method.]]>
10242*dc5640d1SHerbert Xue      </doc>
10243*dc5640d1SHerbert Xue    </method>
10244*dc5640d1SHerbert Xue    <doc>
10245*dc5640d1SHerbert Xue    <![CDATA[A visitor for the {@literal @}{@link Provides} bindings.
10246*dc5640d1SHerbert Xue <p>
10247*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
10248*dc5640d1SHerbert Xue {@code @Provides} will be visited through this interface.
10249*dc5640d1SHerbert Xue
10250*dc5640d1SHerbert Xue @since 4.0
10251*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10252*dc5640d1SHerbert Xue    </doc>
10253*dc5640d1SHerbert Xue  </interface>
10254*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10255*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvisionListener -->
10256*dc5640d1SHerbert Xue  <interface name="ProvisionListener"    abstract="true"
10257*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10258*dc5640d1SHerbert Xue    deprecated="not deprecated">
10259*dc5640d1SHerbert Xue    <method name="onProvision"
10260*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10261*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10262*dc5640d1SHerbert Xue      deprecated="not deprecated">
10263*dc5640d1SHerbert Xue      <param name="provision" type="com.google.inject.spi.ProvisionListener.ProvisionInvocation&lt;T&gt;"/>
10264*dc5640d1SHerbert Xue      <doc>
10265*dc5640d1SHerbert Xue      <![CDATA[Invoked by Guice when an object requires provisioning. Provisioning occurs
10266*dc5640d1SHerbert Xue when Guice locates and injects the dependencies for a binding. For types
10267*dc5640d1SHerbert Xue bound to a Provider, provisioning encapsulates the {@link Provider#get}
10268*dc5640d1SHerbert Xue method. For toInstance or constant bindings, provisioning encapsulates
10269*dc5640d1SHerbert Xue the injecting of {@literal @}{@code Inject}ed fields or methods.
10270*dc5640d1SHerbert Xue For other types, provisioning encapsulates the construction of the
10271*dc5640d1SHerbert Xue object. If a type is bound within a {@link Scope}, provisioning depends on
10272*dc5640d1SHerbert Xue the scope. Types bound in Singleton scope will only be provisioned once.
10273*dc5640d1SHerbert Xue Types bound in no scope will be provisioned every time they are injected.
10274*dc5640d1SHerbert Xue Other scopes define their own behavior for provisioning.
10275*dc5640d1SHerbert Xue <p>
10276*dc5640d1SHerbert Xue To perform the provision, call {@link ProvisionInvocation#provision()}.
10277*dc5640d1SHerbert Xue If you do not explicitly call provision, it will be automatically done after
10278*dc5640d1SHerbert Xue this method returns.  It is an error to call provision more than once.]]>
10279*dc5640d1SHerbert Xue      </doc>
10280*dc5640d1SHerbert Xue    </method>
10281*dc5640d1SHerbert Xue    <doc>
10282*dc5640d1SHerbert Xue    <![CDATA[Listens for provisioning of objects. Useful for gathering timing information
10283*dc5640d1SHerbert Xue about provisioning, post-provision initialization, and more.
10284*dc5640d1SHerbert Xue
10285*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10286*dc5640d1SHerbert Xue @since 4.0]]>
10287*dc5640d1SHerbert Xue    </doc>
10288*dc5640d1SHerbert Xue  </interface>
10289*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvisionListener -->
10290*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10291*dc5640d1SHerbert Xue  <class name="ProvisionListener.ProvisionInvocation" extends="java.lang.Object"
10292*dc5640d1SHerbert Xue    abstract="true"
10293*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
10294*dc5640d1SHerbert Xue    deprecated="not deprecated">
10295*dc5640d1SHerbert Xue    <constructor name="ProvisionInvocation"
10296*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10297*dc5640d1SHerbert Xue      deprecated="not deprecated">
10298*dc5640d1SHerbert Xue    </constructor>
10299*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
10300*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10301*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10302*dc5640d1SHerbert Xue      deprecated="not deprecated">
10303*dc5640d1SHerbert Xue      <doc>
10304*dc5640d1SHerbert Xue      <![CDATA[Returns the Binding this is provisioning.
10305*dc5640d1SHerbert Xue <p>
10306*dc5640d1SHerbert Xue You must not call {@link Provider#get()} on the provider returned by
10307*dc5640d1SHerbert Xue {@link Binding#getProvider}, otherwise you will get confusing error messages.]]>
10308*dc5640d1SHerbert Xue      </doc>
10309*dc5640d1SHerbert Xue    </method>
10310*dc5640d1SHerbert Xue    <method name="provision" return="T"
10311*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10312*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10313*dc5640d1SHerbert Xue      deprecated="not deprecated">
10314*dc5640d1SHerbert Xue      <doc>
10315*dc5640d1SHerbert Xue      <![CDATA[Performs the provision, returning the object provisioned.]]>
10316*dc5640d1SHerbert Xue      </doc>
10317*dc5640d1SHerbert Xue    </method>
10318*dc5640d1SHerbert Xue    <method name="getDependencyChain" return="java.util.List&lt;com.google.inject.spi.DependencyAndSource&gt;"
10319*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10320*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10321*dc5640d1SHerbert Xue      deprecated="not deprecated">
10322*dc5640d1SHerbert Xue      <doc>
10323*dc5640d1SHerbert Xue      <![CDATA[Returns the dependency chain that led to this object being provisioned.]]>
10324*dc5640d1SHerbert Xue      </doc>
10325*dc5640d1SHerbert Xue    </method>
10326*dc5640d1SHerbert Xue    <doc>
10327*dc5640d1SHerbert Xue    <![CDATA[Encapsulates a single act of provisioning.
10328*dc5640d1SHerbert Xue
10329*dc5640d1SHerbert Xue @since 4.0]]>
10330*dc5640d1SHerbert Xue    </doc>
10331*dc5640d1SHerbert Xue  </class>
10332*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10333*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProvisionListenerBinding -->
10334*dc5640d1SHerbert Xue  <class name="ProvisionListenerBinding" extends="java.lang.Object"
10335*dc5640d1SHerbert Xue    abstract="false"
10336*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10337*dc5640d1SHerbert Xue    deprecated="not deprecated">
10338*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10339*dc5640d1SHerbert Xue    <method name="getListeners" return="java.util.List&lt;com.google.inject.spi.ProvisionListener&gt;"
10340*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10341*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10342*dc5640d1SHerbert Xue      deprecated="not deprecated">
10343*dc5640d1SHerbert Xue      <doc>
10344*dc5640d1SHerbert Xue      <![CDATA[Returns the registered listeners.]]>
10345*dc5640d1SHerbert Xue      </doc>
10346*dc5640d1SHerbert Xue    </method>
10347*dc5640d1SHerbert Xue    <method name="getBindingMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"
10348*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10349*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10350*dc5640d1SHerbert Xue      deprecated="not deprecated">
10351*dc5640d1SHerbert Xue      <doc>
10352*dc5640d1SHerbert Xue      <![CDATA[Returns the binding matcher which chooses which bindings the listener should be notified of.]]>
10353*dc5640d1SHerbert Xue      </doc>
10354*dc5640d1SHerbert Xue    </method>
10355*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10356*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10357*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10358*dc5640d1SHerbert Xue      deprecated="not deprecated">
10359*dc5640d1SHerbert Xue    </method>
10360*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="R"
10361*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10362*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10363*dc5640d1SHerbert Xue      deprecated="not deprecated">
10364*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
10365*dc5640d1SHerbert Xue    </method>
10366*dc5640d1SHerbert Xue    <method name="applyTo"
10367*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10368*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10369*dc5640d1SHerbert Xue      deprecated="not deprecated">
10370*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10371*dc5640d1SHerbert Xue    </method>
10372*dc5640d1SHerbert Xue    <doc>
10373*dc5640d1SHerbert Xue    <![CDATA[Binds keys (picked using a Matcher) to a provision listener. Listeners are created explicitly in
10374*dc5640d1SHerbert Xue a module using {@link Binder#bindListener(Matcher, ProvisionListener...)} statements:
10375*dc5640d1SHerbert Xue
10376*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10377*dc5640d1SHerbert Xue @since 4.0]]>
10378*dc5640d1SHerbert Xue    </doc>
10379*dc5640d1SHerbert Xue  </class>
10380*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProvisionListenerBinding -->
10381*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10382*dc5640d1SHerbert Xue  <class name="RequireAtInjectOnConstructorsOption" extends="java.lang.Object"
10383*dc5640d1SHerbert Xue    abstract="false"
10384*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10385*dc5640d1SHerbert Xue    deprecated="not deprecated">
10386*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10387*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10388*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10389*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10390*dc5640d1SHerbert Xue      deprecated="not deprecated">
10391*dc5640d1SHerbert Xue    </method>
10392*dc5640d1SHerbert Xue    <method name="applyTo"
10393*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10394*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10395*dc5640d1SHerbert Xue      deprecated="not deprecated">
10396*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10397*dc5640d1SHerbert Xue    </method>
10398*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10399*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10400*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10401*dc5640d1SHerbert Xue      deprecated="not deprecated">
10402*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10403*dc5640d1SHerbert Xue    </method>
10404*dc5640d1SHerbert Xue    <doc>
10405*dc5640d1SHerbert Xue    <![CDATA[A request to require explicit {@literal @}{@link Inject} annotations on constructors.
10406*dc5640d1SHerbert Xue
10407*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10408*dc5640d1SHerbert Xue @since 4.0]]>
10409*dc5640d1SHerbert Xue    </doc>
10410*dc5640d1SHerbert Xue  </class>
10411*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10412*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10413*dc5640d1SHerbert Xue  <class name="RequireExactBindingAnnotationsOption" extends="java.lang.Object"
10414*dc5640d1SHerbert Xue    abstract="false"
10415*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10416*dc5640d1SHerbert Xue    deprecated="not deprecated">
10417*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10418*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10419*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10420*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10421*dc5640d1SHerbert Xue      deprecated="not deprecated">
10422*dc5640d1SHerbert Xue    </method>
10423*dc5640d1SHerbert Xue    <method name="applyTo"
10424*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10425*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10426*dc5640d1SHerbert Xue      deprecated="not deprecated">
10427*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10428*dc5640d1SHerbert Xue    </method>
10429*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10430*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10431*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10432*dc5640d1SHerbert Xue      deprecated="not deprecated">
10433*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10434*dc5640d1SHerbert Xue    </method>
10435*dc5640d1SHerbert Xue    <doc>
10436*dc5640d1SHerbert Xue    <![CDATA[A request to require exact binding annotations.
10437*dc5640d1SHerbert Xue
10438*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10439*dc5640d1SHerbert Xue @since 4.0]]>
10440*dc5640d1SHerbert Xue    </doc>
10441*dc5640d1SHerbert Xue  </class>
10442*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10443*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
10444*dc5640d1SHerbert Xue  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
10445*dc5640d1SHerbert Xue    abstract="false"
10446*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10447*dc5640d1SHerbert Xue    deprecated="not deprecated">
10448*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10449*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10450*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10451*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10452*dc5640d1SHerbert Xue      deprecated="not deprecated">
10453*dc5640d1SHerbert Xue    </method>
10454*dc5640d1SHerbert Xue    <method name="applyTo"
10455*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10456*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10457*dc5640d1SHerbert Xue      deprecated="not deprecated">
10458*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10459*dc5640d1SHerbert Xue    </method>
10460*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10461*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10462*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10463*dc5640d1SHerbert Xue      deprecated="not deprecated">
10464*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10465*dc5640d1SHerbert Xue    </method>
10466*dc5640d1SHerbert Xue    <doc>
10467*dc5640d1SHerbert Xue    <![CDATA[A request to require explicit bindings.
10468*dc5640d1SHerbert Xue
10469*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10470*dc5640d1SHerbert Xue @since 3.0]]>
10471*dc5640d1SHerbert Xue    </doc>
10472*dc5640d1SHerbert Xue  </class>
10473*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
10474*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ScopeBinding -->
10475*dc5640d1SHerbert Xue  <class name="ScopeBinding" extends="java.lang.Object"
10476*dc5640d1SHerbert Xue    abstract="false"
10477*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10478*dc5640d1SHerbert Xue    deprecated="not deprecated">
10479*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10480*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10481*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10482*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10483*dc5640d1SHerbert Xue      deprecated="not deprecated">
10484*dc5640d1SHerbert Xue    </method>
10485*dc5640d1SHerbert Xue    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
10486*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10487*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10488*dc5640d1SHerbert Xue      deprecated="not deprecated">
10489*dc5640d1SHerbert Xue    </method>
10490*dc5640d1SHerbert Xue    <method name="getScope" return="com.google.inject.Scope"
10491*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10492*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10493*dc5640d1SHerbert Xue      deprecated="not deprecated">
10494*dc5640d1SHerbert Xue    </method>
10495*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10496*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10497*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10498*dc5640d1SHerbert Xue      deprecated="not deprecated">
10499*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10500*dc5640d1SHerbert Xue    </method>
10501*dc5640d1SHerbert Xue    <method name="applyTo"
10502*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10503*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10504*dc5640d1SHerbert Xue      deprecated="not deprecated">
10505*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10506*dc5640d1SHerbert Xue    </method>
10507*dc5640d1SHerbert Xue    <doc>
10508*dc5640d1SHerbert Xue    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
10509*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
10510*dc5640d1SHerbert Xue statements:
10511*dc5640d1SHerbert Xue <pre>
10512*dc5640d1SHerbert Xue     Scope recordScope = new RecordScope();
10513*dc5640d1SHerbert Xue     bindScope(RecordScoped.class, new RecordScope());</pre>
10514*dc5640d1SHerbert Xue
10515*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10516*dc5640d1SHerbert Xue @since 2.0]]>
10517*dc5640d1SHerbert Xue    </doc>
10518*dc5640d1SHerbert Xue  </class>
10519*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ScopeBinding -->
10520*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
10521*dc5640d1SHerbert Xue  <class name="StaticInjectionRequest" extends="java.lang.Object"
10522*dc5640d1SHerbert Xue    abstract="false"
10523*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10524*dc5640d1SHerbert Xue    deprecated="not deprecated">
10525*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10526*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10527*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10528*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10529*dc5640d1SHerbert Xue      deprecated="not deprecated">
10530*dc5640d1SHerbert Xue    </method>
10531*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.Class&lt;?&gt;"
10532*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10533*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10534*dc5640d1SHerbert Xue      deprecated="not deprecated">
10535*dc5640d1SHerbert Xue    </method>
10536*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
10537*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10538*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10539*dc5640d1SHerbert Xue      deprecated="not deprecated">
10540*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
10541*dc5640d1SHerbert Xue      <doc>
10542*dc5640d1SHerbert Xue      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
10543*dc5640d1SHerbert Xue request.
10544*dc5640d1SHerbert Xue
10545*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
10546*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
10547*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
10548*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
10549*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
10550*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
10551*dc5640d1SHerbert Xue      of the valid injection points.]]>
10552*dc5640d1SHerbert Xue      </doc>
10553*dc5640d1SHerbert Xue    </method>
10554*dc5640d1SHerbert Xue    <method name="applyTo"
10555*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10556*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10557*dc5640d1SHerbert Xue      deprecated="not deprecated">
10558*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10559*dc5640d1SHerbert Xue    </method>
10560*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10561*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10562*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10563*dc5640d1SHerbert Xue      deprecated="not deprecated">
10564*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10565*dc5640d1SHerbert Xue    </method>
10566*dc5640d1SHerbert Xue    <doc>
10567*dc5640d1SHerbert Xue    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
10568*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
10569*dc5640d1SHerbert Xue requestStaticInjection()} statements:
10570*dc5640d1SHerbert Xue <pre>
10571*dc5640d1SHerbert Xue     requestStaticInjection(MyLegacyService.class);</pre>
10572*dc5640d1SHerbert Xue
10573*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10574*dc5640d1SHerbert Xue @since 2.0]]>
10575*dc5640d1SHerbert Xue    </doc>
10576*dc5640d1SHerbert Xue  </class>
10577*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
10578*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Toolable -->
10579*dc5640d1SHerbert Xue  <class name="Toolable"    abstract="true"
10580*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10581*dc5640d1SHerbert Xue    deprecated="not deprecated">
10582*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
10583*dc5640d1SHerbert Xue    <doc>
10584*dc5640d1SHerbert Xue    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
10585*dc5640d1SHerbert Xue This is typically useful for for extensions to Guice that perform additional validation in an
10586*dc5640d1SHerbert Xue injected method or field.  This only applies to objects that are already constructed when
10587*dc5640d1SHerbert Xue bindings are created (ie., something bound using {@link
10588*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
10589*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
10590*dc5640d1SHerbert Xue com.google.inject.Binder#requestInjection requestInjection}.
10591*dc5640d1SHerbert Xue
10592*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10593*dc5640d1SHerbert Xue @since 3.0]]>
10594*dc5640d1SHerbert Xue    </doc>
10595*dc5640d1SHerbert Xue  </class>
10596*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Toolable -->
10597*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeConverter -->
10598*dc5640d1SHerbert Xue  <interface name="TypeConverter"    abstract="true"
10599*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10600*dc5640d1SHerbert Xue    deprecated="not deprecated">
10601*dc5640d1SHerbert Xue    <method name="convert" return="java.lang.Object"
10602*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10603*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10604*dc5640d1SHerbert Xue      deprecated="not deprecated">
10605*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
10606*dc5640d1SHerbert Xue      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
10607*dc5640d1SHerbert Xue      <doc>
10608*dc5640d1SHerbert Xue      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
10609*dc5640d1SHerbert Xue      </doc>
10610*dc5640d1SHerbert Xue    </method>
10611*dc5640d1SHerbert Xue    <doc>
10612*dc5640d1SHerbert Xue    <![CDATA[Converts constant string values to a different type.
10613*dc5640d1SHerbert Xue
10614*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
10615*dc5640d1SHerbert Xue @since 2.0]]>
10616*dc5640d1SHerbert Xue    </doc>
10617*dc5640d1SHerbert Xue  </interface>
10618*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeConverter -->
10619*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeConverterBinding -->
10620*dc5640d1SHerbert Xue  <class name="TypeConverterBinding" extends="java.lang.Object"
10621*dc5640d1SHerbert Xue    abstract="false"
10622*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10623*dc5640d1SHerbert Xue    deprecated="not deprecated">
10624*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10625*dc5640d1SHerbert Xue    <constructor name="TypeConverterBinding" type="java.lang.Object, com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;, com.google.inject.spi.TypeConverter"
10626*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10627*dc5640d1SHerbert Xue      deprecated="not deprecated">
10628*dc5640d1SHerbert Xue      <doc>
10629*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
10630*dc5640d1SHerbert Xue      </doc>
10631*dc5640d1SHerbert Xue    </constructor>
10632*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10633*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10634*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10635*dc5640d1SHerbert Xue      deprecated="not deprecated">
10636*dc5640d1SHerbert Xue    </method>
10637*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10638*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10639*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10640*dc5640d1SHerbert Xue      deprecated="not deprecated">
10641*dc5640d1SHerbert Xue    </method>
10642*dc5640d1SHerbert Xue    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
10643*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10644*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10645*dc5640d1SHerbert Xue      deprecated="not deprecated">
10646*dc5640d1SHerbert Xue    </method>
10647*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10648*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10649*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10650*dc5640d1SHerbert Xue      deprecated="not deprecated">
10651*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10652*dc5640d1SHerbert Xue    </method>
10653*dc5640d1SHerbert Xue    <method name="applyTo"
10654*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10655*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10656*dc5640d1SHerbert Xue      deprecated="not deprecated">
10657*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10658*dc5640d1SHerbert Xue    </method>
10659*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
10660*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10661*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10662*dc5640d1SHerbert Xue      deprecated="not deprecated">
10663*dc5640d1SHerbert Xue    </method>
10664*dc5640d1SHerbert Xue    <doc>
10665*dc5640d1SHerbert Xue    <![CDATA[Registration of type converters for matching target types. Instances are created
10666*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
10667*dc5640d1SHerbert Xue TypeConverter) convertToTypes()} statements:
10668*dc5640d1SHerbert Xue <pre>
10669*dc5640d1SHerbert Xue     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
10670*dc5640d1SHerbert Xue
10671*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10672*dc5640d1SHerbert Xue @since 2.0]]>
10673*dc5640d1SHerbert Xue    </doc>
10674*dc5640d1SHerbert Xue  </class>
10675*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeConverterBinding -->
10676*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeEncounter -->
10677*dc5640d1SHerbert Xue  <interface name="TypeEncounter"    abstract="true"
10678*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10679*dc5640d1SHerbert Xue    deprecated="not deprecated">
10680*dc5640d1SHerbert Xue    <method name="addError"
10681*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10682*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10683*dc5640d1SHerbert Xue      deprecated="not deprecated">
10684*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
10685*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
10686*dc5640d1SHerbert Xue      <doc>
10687*dc5640d1SHerbert Xue      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
10688*dc5640d1SHerbert Xue time. Unlike throwing an exception, this enable us to continue configuring the Injector and
10689*dc5640d1SHerbert Xue discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
10690*dc5640d1SHerbert Xue into the message.]]>
10691*dc5640d1SHerbert Xue      </doc>
10692*dc5640d1SHerbert Xue    </method>
10693*dc5640d1SHerbert Xue    <method name="addError"
10694*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10695*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10696*dc5640d1SHerbert Xue      deprecated="not deprecated">
10697*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
10698*dc5640d1SHerbert Xue      <doc>
10699*dc5640d1SHerbert Xue      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
10700*dc5640d1SHerbert Xue message of which will be presented to the user at a later time. If your type listener calls
10701*dc5640d1SHerbert Xue something that you worry may fail, you should catch the exception and pass it to this method.]]>
10702*dc5640d1SHerbert Xue      </doc>
10703*dc5640d1SHerbert Xue    </method>
10704*dc5640d1SHerbert Xue    <method name="addError"
10705*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10706*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10707*dc5640d1SHerbert Xue      deprecated="not deprecated">
10708*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
10709*dc5640d1SHerbert Xue      <doc>
10710*dc5640d1SHerbert Xue      <![CDATA[Records an error message to be presented to the user at a later time.]]>
10711*dc5640d1SHerbert Xue      </doc>
10712*dc5640d1SHerbert Xue    </method>
10713*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10714*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10715*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10716*dc5640d1SHerbert Xue      deprecated="not deprecated">
10717*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
10718*dc5640d1SHerbert Xue      <doc>
10719*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
10720*dc5640d1SHerbert Xue provider will not be valid until the injector has been created. The provider will throw an
10721*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
10722*dc5640d1SHerbert Xue      </doc>
10723*dc5640d1SHerbert Xue    </method>
10724*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10725*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10726*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10727*dc5640d1SHerbert Xue      deprecated="not deprecated">
10728*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10729*dc5640d1SHerbert Xue      <doc>
10730*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
10731*dc5640d1SHerbert Xue provider will not be valid until the injector has been created. The provider will throw an
10732*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
10733*dc5640d1SHerbert Xue      </doc>
10734*dc5640d1SHerbert Xue    </method>
10735*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10736*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10737*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10738*dc5640d1SHerbert Xue      deprecated="not deprecated">
10739*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
10740*dc5640d1SHerbert Xue      <doc>
10741*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10742*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
10743*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
10744*dc5640d1SHerbert Xue if you try to use it beforehand.
10745*dc5640d1SHerbert Xue
10746*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for]]>
10747*dc5640d1SHerbert Xue      </doc>
10748*dc5640d1SHerbert Xue    </method>
10749*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10750*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10751*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10752*dc5640d1SHerbert Xue      deprecated="not deprecated">
10753*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10754*dc5640d1SHerbert Xue      <doc>
10755*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10756*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
10757*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
10758*dc5640d1SHerbert Xue if you try to use it beforehand.
10759*dc5640d1SHerbert Xue
10760*dc5640d1SHerbert Xue @param type type to get members injector for]]>
10761*dc5640d1SHerbert Xue      </doc>
10762*dc5640d1SHerbert Xue    </method>
10763*dc5640d1SHerbert Xue    <method name="register"
10764*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10765*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10766*dc5640d1SHerbert Xue      deprecated="not deprecated">
10767*dc5640d1SHerbert Xue      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
10768*dc5640d1SHerbert Xue      <doc>
10769*dc5640d1SHerbert Xue      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
10770*dc5640d1SHerbert Xue performed its own injections on an instance of {@code I}.]]>
10771*dc5640d1SHerbert Xue      </doc>
10772*dc5640d1SHerbert Xue    </method>
10773*dc5640d1SHerbert Xue    <method name="register"
10774*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10775*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10776*dc5640d1SHerbert Xue      deprecated="not deprecated">
10777*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
10778*dc5640d1SHerbert Xue      <doc>
10779*dc5640d1SHerbert Xue      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
10780*dc5640d1SHerbert Xue injections have been performed on an instance of {@code I}.]]>
10781*dc5640d1SHerbert Xue      </doc>
10782*dc5640d1SHerbert Xue    </method>
10783*dc5640d1SHerbert Xue    <method name="bindInterceptor"
10784*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10785*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10786*dc5640d1SHerbert Xue      deprecated="not deprecated">
10787*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
10788*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
10789*dc5640d1SHerbert Xue      <doc>
10790*dc5640d1SHerbert Xue      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
10791*dc5640d1SHerbert Xue method is eligible for interception if:
10792*dc5640d1SHerbert Xue
10793*dc5640d1SHerbert Xue <ul>
10794*dc5640d1SHerbert Xue  <li>Guice created the instance the method is on</li>
10795*dc5640d1SHerbert Xue  <li>Neither the enclosing type nor the method is final</li>
10796*dc5640d1SHerbert Xue  <li>And the method is package-private or more accessible</li>
10797*dc5640d1SHerbert Xue </ul>
10798*dc5640d1SHerbert Xue
10799*dc5640d1SHerbert Xue @param methodMatcher matches methods the interceptor should apply to. For
10800*dc5640d1SHerbert Xue     example: {@code annotatedWith(Transactional.class)}.
10801*dc5640d1SHerbert Xue @param interceptors to bind]]>
10802*dc5640d1SHerbert Xue      </doc>
10803*dc5640d1SHerbert Xue    </method>
10804*dc5640d1SHerbert Xue    <doc>
10805*dc5640d1SHerbert Xue    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
10806*dc5640d1SHerbert Xue listeners and binding method interceptors for injectable type {@code I}. It is an error to use
10807*dc5640d1SHerbert Xue an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
10808*dc5640d1SHerbert Xue returned.
10809*dc5640d1SHerbert Xue
10810*dc5640d1SHerbert Xue @param <I> the injectable type encountered
10811*dc5640d1SHerbert Xue @since 2.0]]>
10812*dc5640d1SHerbert Xue    </doc>
10813*dc5640d1SHerbert Xue  </interface>
10814*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeEncounter -->
10815*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeListener -->
10816*dc5640d1SHerbert Xue  <interface name="TypeListener"    abstract="true"
10817*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10818*dc5640d1SHerbert Xue    deprecated="not deprecated">
10819*dc5640d1SHerbert Xue    <method name="hear"
10820*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10821*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10822*dc5640d1SHerbert Xue      deprecated="not deprecated">
10823*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
10824*dc5640d1SHerbert Xue      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
10825*dc5640d1SHerbert Xue      <doc>
10826*dc5640d1SHerbert Xue      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
10827*dc5640d1SHerbert Xue Called during injector creation (or afterwards if Guice encounters a type at run time and
10828*dc5640d1SHerbert Xue creates a JIT binding).
10829*dc5640d1SHerbert Xue
10830*dc5640d1SHerbert Xue @param type encountered by Guice
10831*dc5640d1SHerbert Xue @param encounter context of this encounter, enables reporting errors, registering injection
10832*dc5640d1SHerbert Xue     listeners and binding method interceptors for {@code type}.
10833*dc5640d1SHerbert Xue
10834*dc5640d1SHerbert Xue @param <I> the injectable type]]>
10835*dc5640d1SHerbert Xue      </doc>
10836*dc5640d1SHerbert Xue    </method>
10837*dc5640d1SHerbert Xue    <doc>
10838*dc5640d1SHerbert Xue    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
10839*dc5640d1SHerbert Xue one situation but only its methods and fields injected in another, Guice will notify this
10840*dc5640d1SHerbert Xue listener once.
10841*dc5640d1SHerbert Xue
10842*dc5640d1SHerbert Xue <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
10843*dc5640d1SHerbert Xue registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
10844*dc5640d1SHerbert Xue com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
10845*dc5640d1SHerbert Xue binding method interceptors}.
10846*dc5640d1SHerbert Xue
10847*dc5640d1SHerbert Xue @since 2.0]]>
10848*dc5640d1SHerbert Xue    </doc>
10849*dc5640d1SHerbert Xue  </interface>
10850*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeListener -->
10851*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeListenerBinding -->
10852*dc5640d1SHerbert Xue  <class name="TypeListenerBinding" extends="java.lang.Object"
10853*dc5640d1SHerbert Xue    abstract="false"
10854*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10855*dc5640d1SHerbert Xue    deprecated="not deprecated">
10856*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10857*dc5640d1SHerbert Xue    <method name="getListener" return="com.google.inject.spi.TypeListener"
10858*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10859*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10860*dc5640d1SHerbert Xue      deprecated="not deprecated">
10861*dc5640d1SHerbert Xue      <doc>
10862*dc5640d1SHerbert Xue      <![CDATA[Returns the registered listener.]]>
10863*dc5640d1SHerbert Xue      </doc>
10864*dc5640d1SHerbert Xue    </method>
10865*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10866*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10867*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10868*dc5640d1SHerbert Xue      deprecated="not deprecated">
10869*dc5640d1SHerbert Xue      <doc>
10870*dc5640d1SHerbert Xue      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
10871*dc5640d1SHerbert Xue      </doc>
10872*dc5640d1SHerbert Xue    </method>
10873*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10874*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10875*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10876*dc5640d1SHerbert Xue      deprecated="not deprecated">
10877*dc5640d1SHerbert Xue    </method>
10878*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10879*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10880*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10881*dc5640d1SHerbert Xue      deprecated="not deprecated">
10882*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10883*dc5640d1SHerbert Xue    </method>
10884*dc5640d1SHerbert Xue    <method name="applyTo"
10885*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10887*dc5640d1SHerbert Xue      deprecated="not deprecated">
10888*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10889*dc5640d1SHerbert Xue    </method>
10890*dc5640d1SHerbert Xue    <doc>
10891*dc5640d1SHerbert Xue    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
10892*dc5640d1SHerbert Xue a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
10893*dc5640d1SHerbert Xue
10894*dc5640d1SHerbert Xue <pre>
10895*dc5640d1SHerbert Xue     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
10896*dc5640d1SHerbert Xue
10897*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10898*dc5640d1SHerbert Xue @since 2.0]]>
10899*dc5640d1SHerbert Xue    </doc>
10900*dc5640d1SHerbert Xue  </class>
10901*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeListenerBinding -->
10902*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.UntargettedBinding -->
10903*dc5640d1SHerbert Xue  <interface name="UntargettedBinding"    abstract="true"
10904*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10905*dc5640d1SHerbert Xue    deprecated="not deprecated">
10906*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10907*dc5640d1SHerbert Xue    <doc>
10908*dc5640d1SHerbert Xue    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
10909*dc5640d1SHerbert Xue strategies to resolve injections.
10910*dc5640d1SHerbert Xue
10911*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10912*dc5640d1SHerbert Xue @since 2.0]]>
10913*dc5640d1SHerbert Xue    </doc>
10914*dc5640d1SHerbert Xue  </interface>
10915*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.UntargettedBinding -->
10916*dc5640d1SHerbert Xue</package>
10917*dc5640d1SHerbert Xue<package name="com.google.inject.spring">
10918*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spring.SpringIntegration -->
10919*dc5640d1SHerbert Xue  <class name="SpringIntegration" extends="java.lang.Object"
10920*dc5640d1SHerbert Xue    abstract="false"
10921*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10922*dc5640d1SHerbert Xue    deprecated="not deprecated">
10923*dc5640d1SHerbert Xue    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
10924*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10925*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10926*dc5640d1SHerbert Xue      deprecated="not deprecated">
10927*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10928*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
10929*dc5640d1SHerbert Xue      <doc>
10930*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
10931*dc5640d1SHerbert Xue Expects a binding to {@link
10932*dc5640d1SHerbert Xue org.springframework.beans.factory.BeanFactory}. Example usage:
10933*dc5640d1SHerbert Xue
10934*dc5640d1SHerbert Xue <pre>
10935*dc5640d1SHerbert Xue bind(DataSource.class)
10936*dc5640d1SHerbert Xue   .toProvider(fromSpring(DataSource.class, "dataSource"));
10937*dc5640d1SHerbert Xue </pre>]]>
10938*dc5640d1SHerbert Xue      </doc>
10939*dc5640d1SHerbert Xue    </method>
10940*dc5640d1SHerbert Xue    <method name="bindAll"
10941*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10942*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10943*dc5640d1SHerbert Xue      deprecated="not deprecated">
10944*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10945*dc5640d1SHerbert Xue      <param name="beanFactory" type="org.springframework.beans.factory.ListableBeanFactory"/>
10946*dc5640d1SHerbert Xue      <doc>
10947*dc5640d1SHerbert Xue      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
10948*dc5640d1SHerbert Xue named "foo", this method creates a binding to the bean's type and
10949*dc5640d1SHerbert Xue {@code @Named("foo")}.
10950*dc5640d1SHerbert Xue
10951*dc5640d1SHerbert Xue @see com.google.inject.name.Named
10952*dc5640d1SHerbert Xue @see com.google.inject.name.Names#named(String)]]>
10953*dc5640d1SHerbert Xue      </doc>
10954*dc5640d1SHerbert Xue    </method>
10955*dc5640d1SHerbert Xue    <doc>
10956*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with Spring.
10957*dc5640d1SHerbert Xue
10958*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
10959*dc5640d1SHerbert Xue    </doc>
10960*dc5640d1SHerbert Xue  </class>
10961*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spring.SpringIntegration -->
10962*dc5640d1SHerbert Xue</package>
10963*dc5640d1SHerbert Xue<package name="com.google.inject.struts2">
10964*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
10965*dc5640d1SHerbert Xue  <class name="GuiceObjectFactory" extends="com.opensymphony.xwork2.ObjectFactory"
10966*dc5640d1SHerbert Xue    abstract="false"
10967*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10968*dc5640d1SHerbert Xue    deprecated="Use {@link com.google.inject.struts2.Struts2Factory} instead.">
10969*dc5640d1SHerbert Xue    <constructor name="GuiceObjectFactory"
10970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10971*dc5640d1SHerbert Xue      deprecated="not deprecated">
10972*dc5640d1SHerbert Xue    </constructor>
10973*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
10974*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10975*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10976*dc5640d1SHerbert Xue      deprecated="not deprecated">
10977*dc5640d1SHerbert Xue    </method>
10978*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class"
10979*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10980*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10981*dc5640d1SHerbert Xue      deprecated="not deprecated">
10982*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
10983*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10984*dc5640d1SHerbert Xue    </method>
10985*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
10986*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10987*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10988*dc5640d1SHerbert Xue      deprecated="not deprecated">
10989*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
10990*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map"/>
10991*dc5640d1SHerbert Xue    </method>
10992*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10993*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10994*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10995*dc5640d1SHerbert Xue      deprecated="not deprecated">
10996*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10997*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
10998*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10999*dc5640d1SHerbert Xue    </method>
11000*dc5640d1SHerbert Xue    <doc>
11001*dc5640d1SHerbert Xue    <![CDATA[@deprecated Use {@link com.google.inject.struts2.Struts2Factory} instead.]]>
11002*dc5640d1SHerbert Xue    </doc>
11003*dc5640d1SHerbert Xue  </class>
11004*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
11005*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2Factory -->
11006*dc5640d1SHerbert Xue  <class name="Struts2Factory" extends="com.opensymphony.xwork2.ObjectFactory"
11007*dc5640d1SHerbert Xue    abstract="false"
11008*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11009*dc5640d1SHerbert Xue    deprecated="not deprecated">
11010*dc5640d1SHerbert Xue    <constructor name="Struts2Factory"
11011*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11012*dc5640d1SHerbert Xue      deprecated="not deprecated">
11013*dc5640d1SHerbert Xue    </constructor>
11014*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
11015*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11016*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11017*dc5640d1SHerbert Xue      deprecated="not deprecated">
11018*dc5640d1SHerbert Xue    </method>
11019*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
11020*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11021*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11022*dc5640d1SHerbert Xue      deprecated="not deprecated">
11023*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
11024*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
11025*dc5640d1SHerbert Xue    </method>
11026*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
11027*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11028*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11029*dc5640d1SHerbert Xue      deprecated="not deprecated">
11030*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
11031*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
11032*dc5640d1SHerbert Xue    </method>
11033*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
11034*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11035*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11036*dc5640d1SHerbert Xue      deprecated="not deprecated">
11037*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
11038*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
11039*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
11040*dc5640d1SHerbert Xue    </method>
11041*dc5640d1SHerbert Xue    <doc>
11042*dc5640d1SHerbert Xue    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
11043*dc5640d1SHerbert Xue GS2 and fixes several bugs.
11044*dc5640d1SHerbert Xue
11045*dc5640d1SHerbert Xue @author [email protected]
11046*dc5640d1SHerbert Xue @author benmccann.com]]>
11047*dc5640d1SHerbert Xue    </doc>
11048*dc5640d1SHerbert Xue  </class>
11049*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2Factory -->
11050*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
11051*dc5640d1SHerbert Xue  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
11052*dc5640d1SHerbert Xue    abstract="false"
11053*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11054*dc5640d1SHerbert Xue    deprecated="not deprecated">
11055*dc5640d1SHerbert Xue    <constructor name="Struts2GuicePluginModule"
11056*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11057*dc5640d1SHerbert Xue      deprecated="not deprecated">
11058*dc5640d1SHerbert Xue    </constructor>
11059*dc5640d1SHerbert Xue    <method name="configure"
11060*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11061*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
11062*dc5640d1SHerbert Xue      deprecated="not deprecated">
11063*dc5640d1SHerbert Xue    </method>
11064*dc5640d1SHerbert Xue    <doc>
11065*dc5640d1SHerbert Xue    <![CDATA[Initializes the Struts 2 Guice Plugin. Must be added to the injector returned
11066*dc5640d1SHerbert Xue by {@link com.google.inject.servlet.GuiceServletContextListener#getInjector}.
11067*dc5640d1SHerbert Xue
11068*dc5640d1SHerbert Xue @author benmccann.com]]>
11069*dc5640d1SHerbert Xue    </doc>
11070*dc5640d1SHerbert Xue  </class>
11071*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
11072*dc5640d1SHerbert Xue</package>
11073*dc5640d1SHerbert Xue<package name="com.google.inject.testing.fieldbinder">
11074*dc5640d1SHerbert Xue  <!-- start class com.google.inject.testing.fieldbinder.Bind -->
11075*dc5640d1SHerbert Xue  <class name="Bind"    abstract="true"
11076*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11077*dc5640d1SHerbert Xue    deprecated="not deprecated">
11078*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
11079*dc5640d1SHerbert Xue    <doc>
11080*dc5640d1SHerbert Xue    <![CDATA[Annotation used by {@link BoundFieldModule} to indicate that a field should be bound to its
11081*dc5640d1SHerbert Xue value using Guice.
11082*dc5640d1SHerbert Xue
11083*dc5640d1SHerbert Xue <p>Binding to {@code null} is only allowed for fields that are annotated {@code @Nullable}. See
11084*dc5640d1SHerbert Xue <a href="https://github.com/google/guice/wiki/UseNullable">https://github.com/google/guice/wiki/UseNullable</a>
11085*dc5640d1SHerbert Xue
11086*dc5640d1SHerbert Xue @see BoundFieldModule
11087*dc5640d1SHerbert Xue @author [email protected] (Russ Harmon)]]>
11088*dc5640d1SHerbert Xue    </doc>
11089*dc5640d1SHerbert Xue  </class>
11090*dc5640d1SHerbert Xue  <!-- end class com.google.inject.testing.fieldbinder.Bind -->
11091*dc5640d1SHerbert Xue  <!-- start class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11092*dc5640d1SHerbert Xue  <class name="BoundFieldModule" extends="java.lang.Object"
11093*dc5640d1SHerbert Xue    abstract="false"
11094*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11095*dc5640d1SHerbert Xue    deprecated="not deprecated">
11096*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
11097*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.testing.fieldbinder.BoundFieldModule"
11098*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11099*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11100*dc5640d1SHerbert Xue      deprecated="not deprecated">
11101*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
11102*dc5640d1SHerbert Xue      <doc>
11103*dc5640d1SHerbert Xue      <![CDATA[Create a BoundFieldModule which binds the {@link Bind} annotated fields of {@code instance}.
11104*dc5640d1SHerbert Xue
11105*dc5640d1SHerbert Xue @param instance the instance whose fields will be bound.
11106*dc5640d1SHerbert Xue @return a module which will bind the {@link Bind} annotated fields of {@code instance}.]]>
11107*dc5640d1SHerbert Xue      </doc>
11108*dc5640d1SHerbert Xue    </method>
11109*dc5640d1SHerbert Xue    <method name="configure"
11110*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11111*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11112*dc5640d1SHerbert Xue      deprecated="not deprecated">
11113*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
11114*dc5640d1SHerbert Xue    </method>
11115*dc5640d1SHerbert Xue    <doc>
11116*dc5640d1SHerbert Xue    <![CDATA[Automatically creates Guice bindings for fields in an object annotated with {@link Bind}.
11117*dc5640d1SHerbert Xue
11118*dc5640d1SHerbert Xue <p>This module is intended for use in tests to reduce the code needed to bind local fields
11119*dc5640d1SHerbert Xue (usually mocks) for injection.
11120*dc5640d1SHerbert Xue
11121*dc5640d1SHerbert Xue <p>The following rules are followed in determining how fields are bound using this module:
11122*dc5640d1SHerbert Xue
11123*dc5640d1SHerbert Xue <ul>
11124*dc5640d1SHerbert Xue <li>
11125*dc5640d1SHerbert Xue For each {@link Bind} annotated field of an object and its superclasses, this module will bind
11126*dc5640d1SHerbert Xue that field's type to that field's value at injector creation time. This includes both instance
11127*dc5640d1SHerbert Xue and static fields.
11128*dc5640d1SHerbert Xue </li>
11129*dc5640d1SHerbert Xue <li>
11130*dc5640d1SHerbert Xue If {@link Bind#to} is specified, the field's value will be bound to the class specified by
11131*dc5640d1SHerbert Xue {@link Bind#to} instead of the field's actual type.
11132*dc5640d1SHerbert Xue </li>
11133*dc5640d1SHerbert Xue <li>
11134*dc5640d1SHerbert Xue If a {@link BindingAnnotation} or {@link javax.inject.Qualifier} is present on the field,
11135*dc5640d1SHerbert Xue that field will be bound using that annotation via {@link AnnotatedBindingBuilder#annotatedWith}.
11136*dc5640d1SHerbert Xue For example, {@code bind(Foo.class).annotatedWith(BarAnnotation.class).toInstance(theValue)}.
11137*dc5640d1SHerbert Xue It is an error to supply more than one {@link BindingAnnotation} or
11138*dc5640d1SHerbert Xue {@link javax.inject.Qualifier}.
11139*dc5640d1SHerbert Xue </li>
11140*dc5640d1SHerbert Xue <li>
11141*dc5640d1SHerbert Xue If the field is of type {@link Provider}, the field's value will be bound as a {@link Provider}
11142*dc5640d1SHerbert Xue using {@link LinkedBindingBuilder#toProvider} to the provider's parameterized type. For example,
11143*dc5640d1SHerbert Xue {@code Provider<Integer>} binds to {@link Integer}. Attempting to bind a non-parameterized
11144*dc5640d1SHerbert Xue {@link Provider} without a {@link Bind#to} clause is an error.
11145*dc5640d1SHerbert Xue </li>
11146*dc5640d1SHerbert Xue </ul>
11147*dc5640d1SHerbert Xue
11148*dc5640d1SHerbert Xue <p>Example use:
11149*dc5640d1SHerbert Xue <pre><code>
11150*dc5640d1SHerbert Xue public class TestFoo {
11151*dc5640d1SHerbert Xue   // bind(new TypeLiteral{@code <List<Object>>}() {}).toInstance(listOfObjects);
11152*dc5640d1SHerbert Xue   {@literal @}Bind private List{@code <Object>} listOfObjects = Lists.of();
11153*dc5640d1SHerbert Xue
11154*dc5640d1SHerbert Xue   // bind(String.class).toProvider(new Provider() { public String get() { return userName; }});
11155*dc5640d1SHerbert Xue   {@literal @}Bind(lazy = true) private String userName;
11156*dc5640d1SHerbert Xue
11157*dc5640d1SHerbert Xue   // bind(SuperClass.class).toInstance(aSubClass);
11158*dc5640d1SHerbert Xue   {@literal @}Bind(to = SuperClass.class) private SubClass aSubClass = new SubClass();
11159*dc5640d1SHerbert Xue
11160*dc5640d1SHerbert Xue   // bind(String.class).annotatedWith(MyBindingAnnotation.class).toInstance(myString);
11161*dc5640d1SHerbert Xue   {@literal @}Bind
11162*dc5640d1SHerbert Xue   {@literal @}MyBindingAnnotation
11163*dc5640d1SHerbert Xue   private String myString = "hello";
11164*dc5640d1SHerbert Xue
11165*dc5640d1SHerbert Xue   // bind(Object.class).toProvider(myProvider);
11166*dc5640d1SHerbert Xue   {@literal @}Bind private Provider{@code <Object>} myProvider = getProvider();
11167*dc5640d1SHerbert Xue
11168*dc5640d1SHerbert Xue   {@literal @}Before public void setUp() {
11169*dc5640d1SHerbert Xue     Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
11170*dc5640d1SHerbert Xue   }
11171*dc5640d1SHerbert Xue }
11172*dc5640d1SHerbert Xue </code></pre>
11173*dc5640d1SHerbert Xue
11174*dc5640d1SHerbert Xue @see Bind
11175*dc5640d1SHerbert Xue @author [email protected] (Russ Harmon)]]>
11176*dc5640d1SHerbert Xue    </doc>
11177*dc5640d1SHerbert Xue  </class>
11178*dc5640d1SHerbert Xue  <!-- end class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11179*dc5640d1SHerbert Xue</package>
11180*dc5640d1SHerbert Xue<package name="com.google.inject.throwingproviders">
11181*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
11182*dc5640d1SHerbert Xue  <interface name="CheckedProvider"    abstract="true"
11183*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11184*dc5640d1SHerbert Xue    deprecated="not deprecated">
11185*dc5640d1SHerbert Xue    <method name="get" return="T"
11186*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11187*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11188*dc5640d1SHerbert Xue      deprecated="not deprecated">
11189*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11190*dc5640d1SHerbert Xue    </method>
11191*dc5640d1SHerbert Xue    <doc>
11192*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11193*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
11194*dc5640d1SHerbert Xue
11195*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
11196*dc5640d1SHerbert Xue Such subinterfaces may not define new methods, but may narrow the exception type.
11197*dc5640d1SHerbert Xue <pre>
11198*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
11199*dc5640d1SHerbert Xue   T get() throws CustomExceptionOne, CustomExceptionTwo;
11200*dc5640d1SHerbert Xue }
11201*dc5640d1SHerbert Xue </pre>
11202*dc5640d1SHerbert Xue
11203*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11204*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11205*dc5640d1SHerbert Xue will invoked at most once within each scope.
11206*dc5640d1SHerbert Xue
11207*dc5640d1SHerbert Xue @since 3.0]]>
11208*dc5640d1SHerbert Xue    </doc>
11209*dc5640d1SHerbert Xue  </interface>
11210*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
11211*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
11212*dc5640d1SHerbert Xue  <class name="CheckedProvides"    abstract="true"
11213*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11214*dc5640d1SHerbert Xue    deprecated="not deprecated">
11215*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
11216*dc5640d1SHerbert Xue    <doc>
11217*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link com.google.inject.Module} to create a
11218*dc5640d1SHerbert Xue {@link CheckedProvider} method binding that can throw exceptions. The
11219*dc5640d1SHerbert Xue method's return type is bound to a {@link CheckedProvider} that can be
11220*dc5640d1SHerbert Xue injected. Guice will pass dependencies to the method as parameters. Install
11221*dc5640d1SHerbert Xue {@literal @}CheckedProvides methods by using
11222*dc5640d1SHerbert Xue {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
11223*dc5640d1SHerbert Xue module where the methods are declared.
11224*dc5640d1SHerbert Xue
11225*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
11226*dc5640d1SHerbert Xue @since 3.0]]>
11227*dc5640d1SHerbert Xue    </doc>
11228*dc5640d1SHerbert Xue  </class>
11229*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
11230*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingInject -->
11231*dc5640d1SHerbert Xue  <class name="ThrowingInject"    abstract="true"
11232*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11233*dc5640d1SHerbert Xue    deprecated="not deprecated">
11234*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
11235*dc5640d1SHerbert Xue    <doc>
11236*dc5640d1SHerbert Xue    <![CDATA[A version of {@literal @}{@link Inject} designed for ThrowingProviders.  Use by:
11237*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11238*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11239*dc5640d1SHerbert Xue    .providing(CustomerImpl.class);
11240*dc5640d1SHerbert Xue </code></pre>
11241*dc5640d1SHerbert Xue where CustomerImpl has a constructor annotated with ThrowingInject.
11242*dc5640d1SHerbert Xue
11243*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
11244*dc5640d1SHerbert Xue @since 4.0]]>
11245*dc5640d1SHerbert Xue    </doc>
11246*dc5640d1SHerbert Xue  </class>
11247*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingInject -->
11248*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
11249*dc5640d1SHerbert Xue  <interface name="ThrowingProvider"    abstract="true"
11250*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11251*dc5640d1SHerbert Xue    deprecated="use {@link CheckedProvider} instead.">
11252*dc5640d1SHerbert Xue    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
11253*dc5640d1SHerbert Xue    <method name="get" return="T"
11254*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11255*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11256*dc5640d1SHerbert Xue      deprecated="not deprecated">
11257*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11258*dc5640d1SHerbert Xue    </method>
11259*dc5640d1SHerbert Xue    <doc>
11260*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11261*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
11262*dc5640d1SHerbert Xue
11263*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
11264*dc5640d1SHerbert Xue Such subinterfaces may not define new methods:
11265*dc5640d1SHerbert Xue <pre>
11266*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
11267*dc5640d1SHerbert Xue </pre>
11268*dc5640d1SHerbert Xue
11269*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11270*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11271*dc5640d1SHerbert Xue will invoked at most once within each scope.
11272*dc5640d1SHerbert Xue
11273*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
11274*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11275*dc5640d1SHerbert Xue @deprecated use {@link CheckedProvider} instead.]]>
11276*dc5640d1SHerbert Xue    </doc>
11277*dc5640d1SHerbert Xue  </interface>
11278*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
11279*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11280*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder" extends="java.lang.Object"
11281*dc5640d1SHerbert Xue    abstract="false"
11282*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11283*dc5640d1SHerbert Xue    deprecated="not deprecated">
11284*dc5640d1SHerbert Xue    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
11285*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11286*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11287*dc5640d1SHerbert Xue      deprecated="not deprecated">
11288*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
11289*dc5640d1SHerbert Xue    </method>
11290*dc5640d1SHerbert Xue    <method name="forModule" return="com.google.inject.Module"
11291*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11292*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11293*dc5640d1SHerbert Xue      deprecated="not deprecated">
11294*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
11295*dc5640d1SHerbert Xue      <doc>
11296*dc5640d1SHerbert Xue      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
11297*dc5640d1SHerbert Xue
11298*dc5640d1SHerbert Xue @since 3.0]]>
11299*dc5640d1SHerbert Xue      </doc>
11300*dc5640d1SHerbert Xue    </method>
11301*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, ?&gt;"
11302*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11303*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11304*dc5640d1SHerbert Xue      deprecated="Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.">
11305*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11306*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.reflect.Type"/>
11307*dc5640d1SHerbert Xue      <doc>
11308*dc5640d1SHerbert Xue      <![CDATA[@deprecated Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.]]>
11309*dc5640d1SHerbert Xue      </doc>
11310*dc5640d1SHerbert Xue    </method>
11311*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11312*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11313*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11314*dc5640d1SHerbert Xue      deprecated="not deprecated">
11315*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11316*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
11317*dc5640d1SHerbert Xue      <doc>
11318*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11319*dc5640d1SHerbert Xue      </doc>
11320*dc5640d1SHerbert Xue    </method>
11321*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11322*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11323*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11324*dc5640d1SHerbert Xue      deprecated="not deprecated">
11325*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11326*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
11327*dc5640d1SHerbert Xue      <doc>
11328*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11329*dc5640d1SHerbert Xue      </doc>
11330*dc5640d1SHerbert Xue    </method>
11331*dc5640d1SHerbert Xue    <doc>
11332*dc5640d1SHerbert Xue    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
11333*dc5640d1SHerbert Xue
11334*dc5640d1SHerbert Xue <p>You can use a fluent API and custom providers:
11335*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11336*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11337*dc5640d1SHerbert Xue    .to(RemoteCustomerProvider.class)
11338*dc5640d1SHerbert Xue    .in(RequestScope.class);
11339*dc5640d1SHerbert Xue </code></pre>
11340*dc5640d1SHerbert Xue or, you can use throwing provider methods:
11341*dc5640d1SHerbert Xue <pre><code>class MyModule extends AbstractModule {
11342*dc5640d1SHerbert Xue   configure() {
11343*dc5640d1SHerbert Xue     ThrowingProviderBinder.install(this, binder());
11344*dc5640d1SHerbert Xue   }
11345*dc5640d1SHerbert Xue
11346*dc5640d1SHerbert Xue   {@literal @}CheckedProvides(RemoteProvider.class)
11347*dc5640d1SHerbert Xue   {@literal @}RequestScope
11348*dc5640d1SHerbert Xue   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
11349*dc5640d1SHerbert Xue     return creator.getCustomerOrThrow();
11350*dc5640d1SHerbert Xue   }
11351*dc5640d1SHerbert Xue }
11352*dc5640d1SHerbert Xue </code></pre>
11353*dc5640d1SHerbert Xue You also can declare that a CheckedProvider construct
11354*dc5640d1SHerbert Xue a particular class whose constructor throws an exception:
11355*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11356*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11357*dc5640d1SHerbert Xue    .providing(CustomerImpl.class)
11358*dc5640d1SHerbert Xue    .in(RequestScope.class);
11359*dc5640d1SHerbert Xue </code></pre>
11360*dc5640d1SHerbert Xue
11361*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
11362*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11363*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
11364*dc5640d1SHerbert Xue    </doc>
11365*dc5640d1SHerbert Xue  </class>
11366*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11367*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11368*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
11369*dc5640d1SHerbert Xue    abstract="false"
11370*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11371*dc5640d1SHerbert Xue    deprecated="not deprecated">
11372*dc5640d1SHerbert Xue    <constructor name="SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
11373*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11374*dc5640d1SHerbert Xue      deprecated="not deprecated">
11375*dc5640d1SHerbert Xue    </constructor>
11376*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11377*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11378*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11379*dc5640d1SHerbert Xue      deprecated="not deprecated">
11380*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
11381*dc5640d1SHerbert Xue    </method>
11382*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11383*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11384*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11385*dc5640d1SHerbert Xue      deprecated="not deprecated">
11386*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
11387*dc5640d1SHerbert Xue    </method>
11388*dc5640d1SHerbert Xue    <method name="scopeExceptions" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11389*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11390*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11391*dc5640d1SHerbert Xue      deprecated="not deprecated">
11392*dc5640d1SHerbert Xue      <param name="scopeExceptions" type="boolean"/>
11393*dc5640d1SHerbert Xue      <doc>
11394*dc5640d1SHerbert Xue      <![CDATA[Determines if exceptions should be scoped. By default exceptions are scoped.
11395*dc5640d1SHerbert Xue
11396*dc5640d1SHerbert Xue @param scopeExceptions whether exceptions should be scoped.
11397*dc5640d1SHerbert Xue @since 4.0]]>
11398*dc5640d1SHerbert Xue      </doc>
11399*dc5640d1SHerbert Xue    </method>
11400*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11401*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11402*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11403*dc5640d1SHerbert Xue      deprecated="not deprecated">
11404*dc5640d1SHerbert Xue      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
11405*dc5640d1SHerbert Xue    </method>
11406*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11407*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11408*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11409*dc5640d1SHerbert Xue      deprecated="not deprecated">
11410*dc5640d1SHerbert Xue      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
11411*dc5640d1SHerbert Xue    </method>
11412*dc5640d1SHerbert Xue    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11413*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11414*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11415*dc5640d1SHerbert Xue      deprecated="not deprecated">
11416*dc5640d1SHerbert Xue      <param name="cxtorClass" type="java.lang.Class&lt;? extends T&gt;"/>
11417*dc5640d1SHerbert Xue      <doc>
11418*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11419*dc5640d1SHerbert Xue      </doc>
11420*dc5640d1SHerbert Xue    </method>
11421*dc5640d1SHerbert Xue    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11422*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11423*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11424*dc5640d1SHerbert Xue      deprecated="not deprecated">
11425*dc5640d1SHerbert Xue      <param name="cxtorLiteral" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
11426*dc5640d1SHerbert Xue      <doc>
11427*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11428*dc5640d1SHerbert Xue      </doc>
11429*dc5640d1SHerbert Xue    </method>
11430*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11431*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11432*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11433*dc5640d1SHerbert Xue      deprecated="not deprecated">
11434*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
11435*dc5640d1SHerbert Xue    </method>
11436*dc5640d1SHerbert Xue  </class>
11437*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11438*dc5640d1SHerbert Xue</package>
11439*dc5640d1SHerbert Xue<package name="com.google.inject.tools.jmx">
11440*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11441*dc5640d1SHerbert Xue  <interface name="ManagedBindingMBean"    abstract="true"
11442*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11443*dc5640d1SHerbert Xue    deprecated="not deprecated">
11444*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
11445*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11446*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11447*dc5640d1SHerbert Xue      deprecated="not deprecated">
11448*dc5640d1SHerbert Xue      <doc>
11449*dc5640d1SHerbert Xue      <![CDATA[Gets the source of this binding.]]>
11450*dc5640d1SHerbert Xue      </doc>
11451*dc5640d1SHerbert Xue    </method>
11452*dc5640d1SHerbert Xue    <method name="getProvider" return="java.lang.String"
11453*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11454*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11455*dc5640d1SHerbert Xue      deprecated="not deprecated">
11456*dc5640d1SHerbert Xue      <doc>
11457*dc5640d1SHerbert Xue      <![CDATA[Gets the provider to which this binding is bound.]]>
11458*dc5640d1SHerbert Xue      </doc>
11459*dc5640d1SHerbert Xue    </method>
11460*dc5640d1SHerbert Xue    <method name="getKey" return="java.lang.String"
11461*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11462*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11463*dc5640d1SHerbert Xue      deprecated="not deprecated">
11464*dc5640d1SHerbert Xue      <doc>
11465*dc5640d1SHerbert Xue      <![CDATA[Gets the binding key.]]>
11466*dc5640d1SHerbert Xue      </doc>
11467*dc5640d1SHerbert Xue    </method>
11468*dc5640d1SHerbert Xue    <doc>
11469*dc5640d1SHerbert Xue    <![CDATA[JMX interface to bindings.
11470*dc5640d1SHerbert Xue
11471*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
11472*dc5640d1SHerbert Xue    </doc>
11473*dc5640d1SHerbert Xue  </interface>
11474*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11475*dc5640d1SHerbert Xue  <!-- start class com.google.inject.tools.jmx.Manager -->
11476*dc5640d1SHerbert Xue  <class name="Manager" extends="java.lang.Object"
11477*dc5640d1SHerbert Xue    abstract="false"
11478*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11479*dc5640d1SHerbert Xue    deprecated="not deprecated">
11480*dc5640d1SHerbert Xue    <constructor name="Manager"
11481*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11482*dc5640d1SHerbert Xue      deprecated="not deprecated">
11483*dc5640d1SHerbert Xue    </constructor>
11484*dc5640d1SHerbert Xue    <method name="manage"
11485*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11486*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11487*dc5640d1SHerbert Xue      deprecated="not deprecated">
11488*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
11489*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
11490*dc5640d1SHerbert Xue      <doc>
11491*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
11492*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
11493*dc5640d1SHerbert Xue      </doc>
11494*dc5640d1SHerbert Xue    </method>
11495*dc5640d1SHerbert Xue    <method name="manage"
11496*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11497*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11498*dc5640d1SHerbert Xue      deprecated="not deprecated">
11499*dc5640d1SHerbert Xue      <param name="server" type="javax.management.MBeanServer"/>
11500*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
11501*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
11502*dc5640d1SHerbert Xue      <doc>
11503*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
11504*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
11505*dc5640d1SHerbert Xue      </doc>
11506*dc5640d1SHerbert Xue    </method>
11507*dc5640d1SHerbert Xue    <method name="main"
11508*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11509*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11510*dc5640d1SHerbert Xue      deprecated="not deprecated">
11511*dc5640d1SHerbert Xue      <param name="args" type="java.lang.String[]"/>
11512*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11513*dc5640d1SHerbert Xue      <doc>
11514*dc5640d1SHerbert Xue      <![CDATA[Run with no arguments for usage instructions.]]>
11515*dc5640d1SHerbert Xue      </doc>
11516*dc5640d1SHerbert Xue    </method>
11517*dc5640d1SHerbert Xue    <doc>
11518*dc5640d1SHerbert Xue    <![CDATA[Provides a JMX interface to Guice.
11519*dc5640d1SHerbert Xue
11520*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
11521*dc5640d1SHerbert Xue    </doc>
11522*dc5640d1SHerbert Xue  </class>
11523*dc5640d1SHerbert Xue  <!-- end class com.google.inject.tools.jmx.Manager -->
11524*dc5640d1SHerbert Xue</package>
11525*dc5640d1SHerbert Xue<package name="com.google.inject.util">
11526*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Modules -->
11527*dc5640d1SHerbert Xue  <class name="Modules" extends="java.lang.Object"
11528*dc5640d1SHerbert Xue    abstract="false"
11529*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11530*dc5640d1SHerbert Xue    deprecated="not deprecated">
11531*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11532*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11533*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11534*dc5640d1SHerbert Xue      deprecated="not deprecated">
11535*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
11536*dc5640d1SHerbert Xue      <doc>
11537*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11538*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
11539*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
11540*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
11541*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
11542*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
11543*dc5640d1SHerbert Xue <pre>
11544*dc5640d1SHerbert Xue Module functionalTestModule
11545*dc5640d1SHerbert Xue     = Modules.override(new ProductionModule()).with(new TestModule());
11546*dc5640d1SHerbert Xue </pre>
11547*dc5640d1SHerbert Xue
11548*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
11549*dc5640d1SHerbert Xue
11550*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
11551*dc5640d1SHerbert Xue      </doc>
11552*dc5640d1SHerbert Xue    </method>
11553*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11554*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11555*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11556*dc5640d1SHerbert Xue      deprecated="not deprecated">
11557*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11558*dc5640d1SHerbert Xue      <doc>
11559*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11560*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
11561*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
11562*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
11563*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
11564*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
11565*dc5640d1SHerbert Xue <pre>
11566*dc5640d1SHerbert Xue Module functionalTestModule
11567*dc5640d1SHerbert Xue     = Modules.override(getProductionModules()).with(getTestModules());
11568*dc5640d1SHerbert Xue </pre>
11569*dc5640d1SHerbert Xue
11570*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
11571*dc5640d1SHerbert Xue
11572*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
11573*dc5640d1SHerbert Xue      </doc>
11574*dc5640d1SHerbert Xue    </method>
11575*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
11576*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11577*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11578*dc5640d1SHerbert Xue      deprecated="not deprecated">
11579*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
11580*dc5640d1SHerbert Xue      <doc>
11581*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11582*dc5640d1SHerbert Xue      </doc>
11583*dc5640d1SHerbert Xue    </method>
11584*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
11585*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11586*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11587*dc5640d1SHerbert Xue      deprecated="not deprecated">
11588*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11589*dc5640d1SHerbert Xue      <doc>
11590*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11591*dc5640d1SHerbert Xue      </doc>
11592*dc5640d1SHerbert Xue    </method>
11593*dc5640d1SHerbert Xue    <field name="EMPTY_MODULE" type="com.google.inject.Module"
11594*dc5640d1SHerbert Xue      transient="false" volatile="false"
11595*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
11596*dc5640d1SHerbert Xue      deprecated="not deprecated">
11597*dc5640d1SHerbert Xue    </field>
11598*dc5640d1SHerbert Xue    <doc>
11599*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
11600*dc5640d1SHerbert Xue
11601*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11602*dc5640d1SHerbert Xue @since 2.0]]>
11603*dc5640d1SHerbert Xue    </doc>
11604*dc5640d1SHerbert Xue  </class>
11605*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Modules -->
11606*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11607*dc5640d1SHerbert Xue  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
11608*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
11609*dc5640d1SHerbert Xue    deprecated="not deprecated">
11610*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
11611*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11612*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11613*dc5640d1SHerbert Xue      deprecated="not deprecated">
11614*dc5640d1SHerbert Xue      <param name="overrides" type="com.google.inject.Module[]"/>
11615*dc5640d1SHerbert Xue      <doc>
11616*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11617*dc5640d1SHerbert Xue      </doc>
11618*dc5640d1SHerbert Xue    </method>
11619*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
11620*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11621*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11622*dc5640d1SHerbert Xue      deprecated="not deprecated">
11623*dc5640d1SHerbert Xue      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11624*dc5640d1SHerbert Xue      <doc>
11625*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11626*dc5640d1SHerbert Xue      </doc>
11627*dc5640d1SHerbert Xue    </method>
11628*dc5640d1SHerbert Xue    <doc>
11629*dc5640d1SHerbert Xue    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11630*dc5640d1SHerbert Xue    </doc>
11631*dc5640d1SHerbert Xue  </interface>
11632*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11633*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Providers -->
11634*dc5640d1SHerbert Xue  <class name="Providers" extends="java.lang.Object"
11635*dc5640d1SHerbert Xue    abstract="false"
11636*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11637*dc5640d1SHerbert Xue    deprecated="not deprecated">
11638*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
11639*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11640*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11641*dc5640d1SHerbert Xue      deprecated="not deprecated">
11642*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
11643*dc5640d1SHerbert Xue      <doc>
11644*dc5640d1SHerbert Xue      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
11645*dc5640d1SHerbert Xue be necessary to use in your application, but is helpful for several types
11646*dc5640d1SHerbert Xue of unit tests.
11647*dc5640d1SHerbert Xue
11648*dc5640d1SHerbert Xue @param instance the instance that should always be provided.  This is also
11649*dc5640d1SHerbert Xue     permitted to be null, to enable aggressive testing, although in real
11650*dc5640d1SHerbert Xue     life a Guice-supplied Provider will never return null.]]>
11651*dc5640d1SHerbert Xue      </doc>
11652*dc5640d1SHerbert Xue    </method>
11653*dc5640d1SHerbert Xue    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
11654*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11655*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11656*dc5640d1SHerbert Xue      deprecated="not deprecated">
11657*dc5640d1SHerbert Xue      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
11658*dc5640d1SHerbert Xue      <doc>
11659*dc5640d1SHerbert Xue      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
11660*dc5640d1SHerbert Xue JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
11661*dc5640d1SHerbert Xue since Guice providers directly implement the JSR-330 interface.
11662*dc5640d1SHerbert Xue
11663*dc5640d1SHerbert Xue @since 3.0]]>
11664*dc5640d1SHerbert Xue      </doc>
11665*dc5640d1SHerbert Xue    </method>
11666*dc5640d1SHerbert Xue    <doc>
11667*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of
11668*dc5640d1SHerbert Xue {@link Provider}.
11669*dc5640d1SHerbert Xue
11670*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
11671*dc5640d1SHerbert Xue @since 2.0]]>
11672*dc5640d1SHerbert Xue    </doc>
11673*dc5640d1SHerbert Xue  </class>
11674*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Providers -->
11675*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Types -->
11676*dc5640d1SHerbert Xue  <class name="Types" extends="java.lang.Object"
11677*dc5640d1SHerbert Xue    abstract="false"
11678*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11679*dc5640d1SHerbert Xue    deprecated="not deprecated">
11680*dc5640d1SHerbert Xue    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
11681*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11682*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11683*dc5640d1SHerbert Xue      deprecated="not deprecated">
11684*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
11685*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11686*dc5640d1SHerbert Xue      <doc>
11687*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11688*dc5640d1SHerbert Xue {@code rawType}. The returned type does not have an owner type.
11689*dc5640d1SHerbert Xue
11690*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11691*dc5640d1SHerbert Xue      </doc>
11692*dc5640d1SHerbert Xue    </method>
11693*dc5640d1SHerbert Xue    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
11694*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11695*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11696*dc5640d1SHerbert Xue      deprecated="not deprecated">
11697*dc5640d1SHerbert Xue      <param name="ownerType" type="java.lang.reflect.Type"/>
11698*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
11699*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11700*dc5640d1SHerbert Xue      <doc>
11701*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11702*dc5640d1SHerbert Xue {@code rawType} and enclosed by {@code ownerType}.
11703*dc5640d1SHerbert Xue
11704*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11705*dc5640d1SHerbert Xue      </doc>
11706*dc5640d1SHerbert Xue    </method>
11707*dc5640d1SHerbert Xue    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
11708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11709*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11710*dc5640d1SHerbert Xue      deprecated="not deprecated">
11711*dc5640d1SHerbert Xue      <param name="componentType" type="java.lang.reflect.Type"/>
11712*dc5640d1SHerbert Xue      <doc>
11713*dc5640d1SHerbert Xue      <![CDATA[Returns an array type whose elements are all instances of
11714*dc5640d1SHerbert Xue {@code componentType}.
11715*dc5640d1SHerbert Xue
11716*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} generic array type.]]>
11717*dc5640d1SHerbert Xue      </doc>
11718*dc5640d1SHerbert Xue    </method>
11719*dc5640d1SHerbert Xue    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
11720*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11721*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11722*dc5640d1SHerbert Xue      deprecated="not deprecated">
11723*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
11724*dc5640d1SHerbert Xue      <doc>
11725*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
11726*dc5640d1SHerbert Xue For example, if {@code bound} is {@code CharSequence.class}, this returns
11727*dc5640d1SHerbert Xue {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
11728*dc5640d1SHerbert Xue this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
11729*dc5640d1SHerbert Xue      </doc>
11730*dc5640d1SHerbert Xue    </method>
11731*dc5640d1SHerbert Xue    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
11732*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11733*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11734*dc5640d1SHerbert Xue      deprecated="not deprecated">
11735*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
11736*dc5640d1SHerbert Xue      <doc>
11737*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
11738*dc5640d1SHerbert Xue example, if {@code bound} is {@code String.class}, this returns {@code ?
11739*dc5640d1SHerbert Xue super String}.]]>
11740*dc5640d1SHerbert Xue      </doc>
11741*dc5640d1SHerbert Xue    </method>
11742*dc5640d1SHerbert Xue    <method name="listOf" return="java.lang.reflect.ParameterizedType"
11743*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11744*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11745*dc5640d1SHerbert Xue      deprecated="not deprecated">
11746*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
11747*dc5640d1SHerbert Xue      <doc>
11748*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
11749*dc5640d1SHerbert Xue {@code elementType}.
11750*dc5640d1SHerbert Xue
11751*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11752*dc5640d1SHerbert Xue      </doc>
11753*dc5640d1SHerbert Xue    </method>
11754*dc5640d1SHerbert Xue    <method name="collectionOf" return="java.lang.reflect.ParameterizedType"
11755*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11756*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11757*dc5640d1SHerbert Xue      deprecated="not deprecated">
11758*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
11759*dc5640d1SHerbert Xue      <doc>
11760*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Collection} whose elements are of type
11761*dc5640d1SHerbert Xue {@code elementType}.
11762*dc5640d1SHerbert Xue
11763*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11764*dc5640d1SHerbert Xue      </doc>
11765*dc5640d1SHerbert Xue    </method>
11766*dc5640d1SHerbert Xue    <method name="setOf" return="java.lang.reflect.ParameterizedType"
11767*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11768*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11769*dc5640d1SHerbert Xue      deprecated="not deprecated">
11770*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
11771*dc5640d1SHerbert Xue      <doc>
11772*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
11773*dc5640d1SHerbert Xue {@code elementType}.
11774*dc5640d1SHerbert Xue
11775*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11776*dc5640d1SHerbert Xue      </doc>
11777*dc5640d1SHerbert Xue    </method>
11778*dc5640d1SHerbert Xue    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
11779*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11780*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11781*dc5640d1SHerbert Xue      deprecated="not deprecated">
11782*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.reflect.Type"/>
11783*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.reflect.Type"/>
11784*dc5640d1SHerbert Xue      <doc>
11785*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
11786*dc5640d1SHerbert Xue {@code keyType} and whose values are of type {@code valueType}.
11787*dc5640d1SHerbert Xue
11788*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11789*dc5640d1SHerbert Xue      </doc>
11790*dc5640d1SHerbert Xue    </method>
11791*dc5640d1SHerbert Xue    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
11792*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11793*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11794*dc5640d1SHerbert Xue      deprecated="not deprecated">
11795*dc5640d1SHerbert Xue      <param name="providedType" type="java.lang.reflect.Type"/>
11796*dc5640d1SHerbert Xue      <doc>
11797*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
11798*dc5640d1SHerbert Xue {@code elementType}.
11799*dc5640d1SHerbert Xue
11800*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11801*dc5640d1SHerbert Xue      </doc>
11802*dc5640d1SHerbert Xue    </method>
11803*dc5640d1SHerbert Xue    <method name="javaxProviderOf" return="java.lang.reflect.Type"
11804*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11805*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11806*dc5640d1SHerbert Xue      deprecated="not deprecated">
11807*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
11808*dc5640d1SHerbert Xue      <doc>
11809*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link javax.inject.Provider} that provides elements of type
11810*dc5640d1SHerbert Xue {@code elementType}.
11811*dc5640d1SHerbert Xue
11812*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11813*dc5640d1SHerbert Xue      </doc>
11814*dc5640d1SHerbert Xue    </method>
11815*dc5640d1SHerbert Xue    <doc>
11816*dc5640d1SHerbert Xue    <![CDATA[Static methods for working with types.
11817*dc5640d1SHerbert Xue
11818*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
11819*dc5640d1SHerbert Xue @since 2.0]]>
11820*dc5640d1SHerbert Xue    </doc>
11821*dc5640d1SHerbert Xue  </class>
11822*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Types -->
11823*dc5640d1SHerbert Xue</package>
11824*dc5640d1SHerbert Xue
11825*dc5640d1SHerbert Xue</api>
11826