xref: /aosp_15_r20/external/guice/latest-api-diffs/4.0.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 Tue Apr 28 17:33:25 EDT 2015 -->
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.0"
10*dc5640d1SHerbert Xue  jdversion="1.1.1">
11*dc5640d1SHerbert Xue
12*dc5640d1SHerbert Xue<!--  Command line arguments =  -doclet jdiff.JDiff -docletpath /usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/jdiff.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/xerces.jar -classpath /usr/local/google/home/cgdecker/Projects/guice/lib/aopalliance.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/guava-16.0.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/javax.inject.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/asm-5.0.3.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/bnd-0.0.384.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/cglib-3.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/easymock.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/felix-2.0.5.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/guava-testlib-16.0.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jarjar-1.1.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/javax.inject-tck.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jsr305.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/junit.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/munge.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/safesax.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/spring-beans.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/spring-core.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/dagger-adapter/lib/dagger-2.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/antlr-2.7.5h3.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/aopalliance.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/cglib-nodep-3.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-collections.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-io.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/db4o-6.4.14.8131-java5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/dom4j-1.6.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/easymock.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/ejb3-persistence.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-annotations.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-entitymanager.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate-search.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hibernate3.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/hsqldb.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/javassist.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jaxen-1.1-beta-7.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jboss-archive-browsing.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/jta.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/log4j-1.2.14.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/ognl-2.6.7.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/oro-2.0.8.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/servlet-api-2.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/persist/lib/xwork-2.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/ant-1.6.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-fileupload-1.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-io-1.3.2.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/commons-logging-1.0.4.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/core-3.1.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/freemarker-2.3.16.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/javassist.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jetty-6.1.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jetty-util-6.1.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jsp-2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/jsp-api-2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/ognl-3.0.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/servlet-api-2.5.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/struts2-core-2.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/extensions/struts2/lib/xwork-core-2.2.1.jar:/usr/local/google/home/cgdecker/Projects/guice/build/classes -doclet jdiff.JDiff -docletpath /usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/jdiff.jar:/usr/local/google/home/cgdecker/Projects/guice/lib/build/jdiff/xerces.jar -apidir build/docs/latest-api-diffs -apiname 4.0 -->
13*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 constructing a {@link Proxy} when a circular dependency
671*dc5640d1SHerbert Xue is found.  By default, circular proxies are not disabled.
672*dc5640d1SHerbert Xue <p>
673*dc5640d1SHerbert Xue If a parent injector disables circular proxies, then all child injectors
674*dc5640d1SHerbert Xue (and private modules within that injector) also disable circular proxies.
675*dc5640d1SHerbert Xue If a parent does not disable circular proxies, a child injector or private
676*dc5640d1SHerbert Xue module may optionally declare itself as disabling circular proxies. If it
677*dc5640d1SHerbert Xue does, the behavior is limited only to that child or any grandchildren. No
678*dc5640d1SHerbert Xue siblings of the child will disable circular proxies.
679*dc5640d1SHerbert Xue
680*dc5640d1SHerbert Xue @since 3.0]]>
681*dc5640d1SHerbert Xue      </doc>
682*dc5640d1SHerbert Xue    </method>
683*dc5640d1SHerbert Xue    <method name="requireAtInjectOnConstructors"
684*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
685*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
686*dc5640d1SHerbert Xue      deprecated="not deprecated">
687*dc5640d1SHerbert Xue      <doc>
688*dc5640d1SHerbert Xue      <![CDATA[Requires that a {@literal @}{@link Inject} annotation exists on a constructor in order for
689*dc5640d1SHerbert Xue Guice to consider it an eligible injectable class. By default, Guice will inject classes that
690*dc5640d1SHerbert Xue have a no-args constructor if no {@literal @}{@link Inject} annotation exists on any
691*dc5640d1SHerbert Xue constructor.
692*dc5640d1SHerbert Xue <p>
693*dc5640d1SHerbert Xue If the class is bound using {@link LinkedBindingBuilder#toConstructor}, Guice will still inject
694*dc5640d1SHerbert Xue that constructor regardless of annotations.
695*dc5640d1SHerbert Xue
696*dc5640d1SHerbert Xue @since 4.0]]>
697*dc5640d1SHerbert Xue      </doc>
698*dc5640d1SHerbert Xue    </method>
699*dc5640d1SHerbert Xue    <method name="requireExactBindingAnnotations"
700*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
701*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
702*dc5640d1SHerbert Xue      deprecated="not deprecated">
703*dc5640d1SHerbert Xue      <doc>
704*dc5640d1SHerbert Xue      <![CDATA[Requires that Guice finds an exactly matching binding annotation.  This disables the
705*dc5640d1SHerbert Xue error-prone feature in Guice where it can substitute a binding for
706*dc5640d1SHerbert Xue <code>{@literal @}Named Foo</code> when attempting to inject
707*dc5640d1SHerbert Xue <code>{@literal @}Named("foo") Foo</code>.
708*dc5640d1SHerbert Xue
709*dc5640d1SHerbert Xue @since 4.0]]>
710*dc5640d1SHerbert Xue      </doc>
711*dc5640d1SHerbert Xue    </method>
712*dc5640d1SHerbert Xue    <method name="scanModulesForAnnotatedMethods"
713*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
714*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
715*dc5640d1SHerbert Xue      deprecated="not deprecated">
716*dc5640d1SHerbert Xue      <param name="scanner" type="com.google.inject.spi.ModuleAnnotatedMethodScanner"/>
717*dc5640d1SHerbert Xue      <doc>
718*dc5640d1SHerbert Xue      <![CDATA[Adds a scanner that will look in all installed modules for annotations the scanner can parse,
719*dc5640d1SHerbert Xue and binds them like {@literal @}Provides methods. Scanners apply to all modules installed in
720*dc5640d1SHerbert Xue the injector. Scanners installed in child injectors or private modules do not impact modules in
721*dc5640d1SHerbert Xue siblings or parents, however scanners installed in parents do apply to all child injectors and
722*dc5640d1SHerbert Xue private modules.
723*dc5640d1SHerbert Xue
724*dc5640d1SHerbert Xue @since 4.0]]>
725*dc5640d1SHerbert Xue      </doc>
726*dc5640d1SHerbert Xue    </method>
727*dc5640d1SHerbert Xue    <doc>
728*dc5640d1SHerbert Xue    <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
729*dc5640d1SHerbert Xue used to create an {@link Injector}. Guice provides this object to your
730*dc5640d1SHerbert Xue application's {@link Module} implementors so they may each contribute
731*dc5640d1SHerbert Xue their own bindings and other registrations.
732*dc5640d1SHerbert Xue
733*dc5640d1SHerbert Xue <h3>The Guice Binding EDSL</h3>
734*dc5640d1SHerbert Xue
735*dc5640d1SHerbert Xue Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
736*dc5640d1SHerbert Xue create bindings simply and readably.  This approach is great for overall
737*dc5640d1SHerbert Xue usability, but it does come with a small cost: <b>it is difficult to
738*dc5640d1SHerbert Xue learn how to use the Binding EDSL by reading
739*dc5640d1SHerbert Xue method-level javadocs</b>.  Instead, you should consult the series of
740*dc5640d1SHerbert Xue examples below.  To save space, these examples omit the opening
741*dc5640d1SHerbert Xue {@code binder}, just as you will if your module extends
742*dc5640d1SHerbert Xue {@link AbstractModule}.
743*dc5640d1SHerbert Xue
744*dc5640d1SHerbert Xue <pre>
745*dc5640d1SHerbert Xue     bind(ServiceImpl.class);</pre>
746*dc5640d1SHerbert Xue
747*dc5640d1SHerbert Xue This statement does essentially nothing; it "binds the {@code ServiceImpl}
748*dc5640d1SHerbert Xue class to itself" and does not change Guice's default behavior.  You may still
749*dc5640d1SHerbert Xue want to use this if you prefer your {@link Module} class to serve as an
750*dc5640d1SHerbert Xue explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
751*dc5640d1SHerbert Xue Guice may be unable to validate a binding at injector creation time unless it
752*dc5640d1SHerbert Xue is given explicitly.
753*dc5640d1SHerbert Xue
754*dc5640d1SHerbert Xue <pre>
755*dc5640d1SHerbert Xue     bind(Service.class).to(ServiceImpl.class);</pre>
756*dc5640d1SHerbert Xue
757*dc5640d1SHerbert Xue Specifies that a request for a {@code Service} instance with no binding
758*dc5640d1SHerbert Xue annotations should be treated as if it were a request for a
759*dc5640d1SHerbert Xue {@code ServiceImpl} instance. This <i>overrides</i> the function of any
760*dc5640d1SHerbert Xue {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
761*dc5640d1SHerbert Xue annotations found on {@code Service}, since Guice will have already
762*dc5640d1SHerbert Xue "moved on" to {@code ServiceImpl} before it reaches the point when it starts
763*dc5640d1SHerbert Xue looking for these annotations.
764*dc5640d1SHerbert Xue
765*dc5640d1SHerbert Xue <pre>
766*dc5640d1SHerbert Xue     bind(Service.class).toProvider(ServiceProvider.class);</pre>
767*dc5640d1SHerbert Xue
768*dc5640d1SHerbert Xue In this example, {@code ServiceProvider} must extend or implement
769*dc5640d1SHerbert Xue {@code Provider<Service>}. This binding specifies that Guice should resolve
770*dc5640d1SHerbert Xue an unannotated injection request for {@code Service} by first resolving an
771*dc5640d1SHerbert Xue instance of {@code ServiceProvider} in the regular way, then calling
772*dc5640d1SHerbert Xue {@link Provider#get get()} on the resulting Provider instance to obtain the
773*dc5640d1SHerbert Xue {@code Service} instance.
774*dc5640d1SHerbert Xue
775*dc5640d1SHerbert Xue <p>The {@link Provider} you use here does not have to be a "factory"; that
776*dc5640d1SHerbert Xue is, a provider which always <i>creates</i> each instance it provides.
777*dc5640d1SHerbert Xue However, this is generally a good practice to follow.  You can then use
778*dc5640d1SHerbert Xue Guice's concept of {@link Scope scopes} to guide when creation should happen
779*dc5640d1SHerbert Xue -- "letting Guice work for you".
780*dc5640d1SHerbert Xue
781*dc5640d1SHerbert Xue <pre>
782*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
783*dc5640d1SHerbert Xue
784*dc5640d1SHerbert Xue Like the previous example, but only applies to injection requests that use
785*dc5640d1SHerbert Xue the binding annotation {@code @Red}.  If your module also includes bindings
786*dc5640d1SHerbert Xue for particular <i>values</i> of the {@code @Red} annotation (see below),
787*dc5640d1SHerbert Xue then this binding will serve as a "catch-all" for any values of {@code @Red}
788*dc5640d1SHerbert Xue that have no exact match in the bindings.
789*dc5640d1SHerbert Xue
790*dc5640d1SHerbert Xue <pre>
791*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Singleton.class);
792*dc5640d1SHerbert Xue     // or, alternatively
793*dc5640d1SHerbert Xue     bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
794*dc5640d1SHerbert Xue
795*dc5640d1SHerbert Xue Either of these statements places the {@code ServiceImpl} class into
796*dc5640d1SHerbert Xue singleton scope.  Guice will create only one instance of {@code ServiceImpl}
797*dc5640d1SHerbert Xue and will reuse it for all injection requests of this type.  Note that it is
798*dc5640d1SHerbert Xue still possible to bind another instance of {@code ServiceImpl} if the second
799*dc5640d1SHerbert Xue binding is qualified by an annotation as in the previous example.  Guice is
800*dc5640d1SHerbert Xue not overly concerned with <i>preventing</i> you from creating multiple
801*dc5640d1SHerbert Xue instances of your "singletons", only with <i>enabling</i> your application to
802*dc5640d1SHerbert Xue share only one instance if that's all you tell Guice you need.
803*dc5640d1SHerbert Xue
804*dc5640d1SHerbert Xue <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
805*dc5640d1SHerbert Xue was specified with an annotation on the {@code ServiceImpl} class.
806*dc5640d1SHerbert Xue
807*dc5640d1SHerbert Xue <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
808*dc5640d1SHerbert Xue servlet-specific scopes available in
809*dc5640d1SHerbert Xue {@code com.google.inject.servlet.ServletScopes}, and your Modules can
810*dc5640d1SHerbert Xue contribute their own custom scopes for use here as well.
811*dc5640d1SHerbert Xue
812*dc5640d1SHerbert Xue <pre>
813*dc5640d1SHerbert Xue     bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
814*dc5640d1SHerbert Xue         .to(CreditCardPaymentService.class);</pre>
815*dc5640d1SHerbert Xue
816*dc5640d1SHerbert Xue This admittedly odd construct is the way to bind a parameterized type. It
817*dc5640d1SHerbert Xue tells Guice how to honor an injection request for an element of type
818*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>}. The class
819*dc5640d1SHerbert Xue {@code CreditCardPaymentService} must implement the
820*dc5640d1SHerbert Xue {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
821*dc5640d1SHerbert Xue inject a generic type, such as {@code Set<E>}; all type parameters must be
822*dc5640d1SHerbert Xue fully specified.
823*dc5640d1SHerbert Xue
824*dc5640d1SHerbert Xue <pre>
825*dc5640d1SHerbert Xue     bind(Service.class).toInstance(new ServiceImpl());
826*dc5640d1SHerbert Xue     // or, alternatively
827*dc5640d1SHerbert Xue     bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
828*dc5640d1SHerbert Xue
829*dc5640d1SHerbert Xue In this example, your module itself, <i>not Guice</i>, takes responsibility
830*dc5640d1SHerbert Xue for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
831*dc5640d1SHerbert Xue this single instance to fulfill all {@code Service} injection requests.  When
832*dc5640d1SHerbert Xue the {@link Injector} is created, it will automatically perform field
833*dc5640d1SHerbert Xue and method injection for this instance, but any injectable constructor on
834*dc5640d1SHerbert Xue {@code ServiceImpl} is simply ignored.  Note that using this approach results
835*dc5640d1SHerbert Xue in "eager loading" behavior that you can't control.
836*dc5640d1SHerbert Xue
837*dc5640d1SHerbert Xue <pre>
838*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
839*dc5640d1SHerbert Xue
840*dc5640d1SHerbert Xue Sets up a constant binding. Constant injections must always be annotated.
841*dc5640d1SHerbert Xue When a constant binding's value is a string, it is eligile for conversion to
842*dc5640d1SHerbert Xue all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
843*dc5640d1SHerbert Xue {@link Class#forName class literals}. Conversions for other types can be
844*dc5640d1SHerbert Xue configured using {@link #convertToTypes(Matcher, TypeConverter)
845*dc5640d1SHerbert Xue convertToTypes()}.
846*dc5640d1SHerbert Xue
847*dc5640d1SHerbert Xue <pre>
848*dc5640d1SHerbert Xue   {@literal @}Color("red") Color red; // A member variable (field)
849*dc5640d1SHerbert Xue    . . .
850*dc5640d1SHerbert Xue     red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
851*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
852*dc5640d1SHerbert Xue
853*dc5640d1SHerbert Xue If your binding annotation has parameters you can apply different bindings to
854*dc5640d1SHerbert Xue different specific values of your annotation.  Getting your hands on the
855*dc5640d1SHerbert Xue right instance of the annotation is a bit of a pain -- one approach, shown
856*dc5640d1SHerbert Xue above, is to apply a prototype annotation to a field in your module class, so
857*dc5640d1SHerbert Xue that you can read this annotation instance and give it to Guice.
858*dc5640d1SHerbert Xue
859*dc5640d1SHerbert Xue <pre>
860*dc5640d1SHerbert Xue     bind(Service.class)
861*dc5640d1SHerbert Xue         .annotatedWith(Names.named("blue"))
862*dc5640d1SHerbert Xue         .to(BlueService.class);</pre>
863*dc5640d1SHerbert Xue
864*dc5640d1SHerbert Xue Differentiating by names is a common enough use case that we provided a
865*dc5640d1SHerbert Xue standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
866*dc5640d1SHerbert Xue Guice's library support, binding by name is quite easier than in the
867*dc5640d1SHerbert Xue arbitrary binding annotation case we just saw.  However, remember that these
868*dc5640d1SHerbert Xue names will live in a single flat namespace with all the other names used in
869*dc5640d1SHerbert Xue your application.
870*dc5640d1SHerbert Xue
871*dc5640d1SHerbert Xue <pre>
872*dc5640d1SHerbert Xue     Constructor<T> loneCtor = getLoneCtorFromServiceImplViaReflection();
873*dc5640d1SHerbert Xue     bind(ServiceImpl.class)
874*dc5640d1SHerbert Xue         .toConstructor(loneCtor);</pre>
875*dc5640d1SHerbert Xue
876*dc5640d1SHerbert Xue In this example, we directly tell Guice which constructor to use in a concrete
877*dc5640d1SHerbert Xue class implementation. It means that we do not need to place {@literal @}Inject
878*dc5640d1SHerbert Xue on any of the constructors and that Guice treats the provided constructor as though
879*dc5640d1SHerbert Xue it were annotated so. It is useful for cases where you cannot modify existing
880*dc5640d1SHerbert Xue classes and is a bit simpler than using a {@link Provider}.
881*dc5640d1SHerbert Xue
882*dc5640d1SHerbert Xue <p>The above list of examples is far from exhaustive.  If you can think of
883*dc5640d1SHerbert Xue how the concepts of one example might coexist with the concepts from another,
884*dc5640d1SHerbert Xue you can most likely weave the two together.  If the two concepts make no
885*dc5640d1SHerbert Xue sense with each other, you most likely won't be able to do it.  In a few
886*dc5640d1SHerbert Xue cases Guice will let something bogus slip by, and will then inform you of
887*dc5640d1SHerbert Xue the problems at runtime, as soon as you try to create your Injector.
888*dc5640d1SHerbert Xue
889*dc5640d1SHerbert Xue <p>The other methods of Binder such as {@link #bindScope},
890*dc5640d1SHerbert Xue {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
891*dc5640d1SHerbert Xue {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
892*dc5640d1SHerbert Xue you can learn how to use these in the usual way, from the method
893*dc5640d1SHerbert Xue documentation.
894*dc5640d1SHerbert Xue
895*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
896*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
897*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)]]>
898*dc5640d1SHerbert Xue    </doc>
899*dc5640d1SHerbert Xue  </interface>
900*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binder -->
901*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Binding -->
902*dc5640d1SHerbert Xue  <interface name="Binding"    abstract="true"
903*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
904*dc5640d1SHerbert Xue    deprecated="not deprecated">
905*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
906*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
907*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
908*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
909*dc5640d1SHerbert Xue      deprecated="not deprecated">
910*dc5640d1SHerbert Xue      <doc>
911*dc5640d1SHerbert Xue      <![CDATA[Returns the key for this binding.]]>
912*dc5640d1SHerbert Xue      </doc>
913*dc5640d1SHerbert Xue    </method>
914*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
915*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
916*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
917*dc5640d1SHerbert Xue      deprecated="not deprecated">
918*dc5640d1SHerbert Xue      <doc>
919*dc5640d1SHerbert Xue      <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
920*dc5640d1SHerbert Xue binding.
921*dc5640d1SHerbert Xue
922*dc5640d1SHerbert Xue @throws UnsupportedOperationException when invoked on a {@link Binding}
923*dc5640d1SHerbert Xue      created via {@link com.google.inject.spi.Elements#getElements}. This
924*dc5640d1SHerbert Xue      method is only supported on {@link Binding}s returned from an injector.]]>
925*dc5640d1SHerbert Xue      </doc>
926*dc5640d1SHerbert Xue    </method>
927*dc5640d1SHerbert Xue    <method name="acceptTargetVisitor" return="V"
928*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
929*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
930*dc5640d1SHerbert Xue      deprecated="not deprecated">
931*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
932*dc5640d1SHerbert Xue      <doc>
933*dc5640d1SHerbert Xue      <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
934*dc5640d1SHerbert Xue
935*dc5640d1SHerbert Xue @param visitor to call back on
936*dc5640d1SHerbert Xue @since 2.0]]>
937*dc5640d1SHerbert Xue      </doc>
938*dc5640d1SHerbert Xue    </method>
939*dc5640d1SHerbert Xue    <method name="acceptScopingVisitor" return="V"
940*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
941*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
942*dc5640d1SHerbert Xue      deprecated="not deprecated">
943*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
944*dc5640d1SHerbert Xue      <doc>
945*dc5640d1SHerbert Xue      <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
946*dc5640d1SHerbert Xue
947*dc5640d1SHerbert Xue @param visitor to call back on
948*dc5640d1SHerbert Xue @since 2.0]]>
949*dc5640d1SHerbert Xue      </doc>
950*dc5640d1SHerbert Xue    </method>
951*dc5640d1SHerbert Xue    <doc>
952*dc5640d1SHerbert Xue    <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
953*dc5640d1SHerbert Xue type. This interface is part of the introspection API and is intended primarily for use by
954*dc5640d1SHerbert Xue tools.
955*dc5640d1SHerbert Xue
956*dc5640d1SHerbert Xue <p>Bindings are created in several ways:
957*dc5640d1SHerbert Xue <ul>
958*dc5640d1SHerbert Xue     <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
959*dc5640d1SHerbert Xue         statements:
960*dc5640d1SHerbert Xue <pre>
961*dc5640d1SHerbert Xue     bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
962*dc5640d1SHerbert Xue     bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
963*dc5640d1SHerbert Xue     <li>Implicitly by the Injector by following a type's {@link ImplementedBy
964*dc5640d1SHerbert Xue         pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
965*dc5640d1SHerbert Xue         default constructor.</li>
966*dc5640d1SHerbert Xue     <li>By converting a bound instance to a different type.</li>
967*dc5640d1SHerbert Xue     <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
968*dc5640d1SHerbert Xue </ul>
969*dc5640d1SHerbert Xue
970*dc5640d1SHerbert Xue
971*dc5640d1SHerbert Xue <p>They exist on both modules and on injectors, and their behaviour is different for each:
972*dc5640d1SHerbert Xue <ul>
973*dc5640d1SHerbert Xue     <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
974*dc5640d1SHerbert Xue         This is because the applicable scopes and interceptors may not be known until an injector
975*dc5640d1SHerbert Xue         is created. From a tool's perspective, module bindings are like the injector's source
976*dc5640d1SHerbert Xue         code. They can be inspected or rewritten, but this analysis must be done statically.</li>
977*dc5640d1SHerbert Xue     <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
978*dc5640d1SHerbert Xue         instances. From a tools' perspective, injector bindings are like reflection for an
979*dc5640d1SHerbert Xue         injector. They have full runtime information, including the complete graph of injections
980*dc5640d1SHerbert Xue         necessary to satisfy a binding.</li>
981*dc5640d1SHerbert Xue </ul>
982*dc5640d1SHerbert Xue
983*dc5640d1SHerbert Xue @param <T> the bound type. The injected is always assignable to this type.
984*dc5640d1SHerbert Xue
985*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
986*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
987*dc5640d1SHerbert Xue    </doc>
988*dc5640d1SHerbert Xue  </interface>
989*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Binding -->
990*dc5640d1SHerbert Xue  <!-- start class com.google.inject.BindingAnnotation -->
991*dc5640d1SHerbert Xue  <class name="BindingAnnotation"    abstract="true"
992*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
993*dc5640d1SHerbert Xue    deprecated="not deprecated">
994*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
995*dc5640d1SHerbert Xue    <doc>
996*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for binding. Only one such annotation
997*dc5640d1SHerbert Xue may apply to a single injection point. You must also annotate binder
998*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
999*dc5640d1SHerbert Xue
1000*dc5640d1SHerbert Xue <pre>
1001*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
1002*dc5640d1SHerbert Xue   {@code @}Target({ FIELD, PARAMETER, METHOD })
1003*dc5640d1SHerbert Xue   {@code @}BindingAnnotation
1004*dc5640d1SHerbert Xue   public {@code @}interface Transactional {}
1005*dc5640d1SHerbert Xue </pre>
1006*dc5640d1SHerbert Xue
1007*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1008*dc5640d1SHerbert Xue    </doc>
1009*dc5640d1SHerbert Xue  </class>
1010*dc5640d1SHerbert Xue  <!-- end class com.google.inject.BindingAnnotation -->
1011*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ConfigurationException -->
1012*dc5640d1SHerbert Xue  <class name="ConfigurationException" extends="java.lang.RuntimeException"
1013*dc5640d1SHerbert Xue    abstract="false"
1014*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1015*dc5640d1SHerbert Xue    deprecated="not deprecated">
1016*dc5640d1SHerbert Xue    <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
1017*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1018*dc5640d1SHerbert Xue      deprecated="not deprecated">
1019*dc5640d1SHerbert Xue      <doc>
1020*dc5640d1SHerbert Xue      <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
1021*dc5640d1SHerbert Xue      </doc>
1022*dc5640d1SHerbert Xue    </constructor>
1023*dc5640d1SHerbert Xue    <method name="withPartialValue" return="com.google.inject.ConfigurationException"
1024*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1025*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1026*dc5640d1SHerbert Xue      deprecated="not deprecated">
1027*dc5640d1SHerbert Xue      <param name="partialValue" type="java.lang.Object"/>
1028*dc5640d1SHerbert Xue      <doc>
1029*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
1030*dc5640d1SHerbert Xue      </doc>
1031*dc5640d1SHerbert Xue    </method>
1032*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1033*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1034*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1035*dc5640d1SHerbert Xue      deprecated="not deprecated">
1036*dc5640d1SHerbert Xue      <doc>
1037*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
1038*dc5640d1SHerbert Xue      </doc>
1039*dc5640d1SHerbert Xue    </method>
1040*dc5640d1SHerbert Xue    <method name="getPartialValue" return="E"
1041*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1042*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1043*dc5640d1SHerbert Xue      deprecated="not deprecated">
1044*dc5640d1SHerbert Xue      <doc>
1045*dc5640d1SHerbert Xue      <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
1046*dc5640d1SHerbert Xue this while collecting additional configuration problems.
1047*dc5640d1SHerbert Xue
1048*dc5640d1SHerbert Xue @return the partial value, or {@code null} if none was set. The type of the partial value is
1049*dc5640d1SHerbert Xue      specified by the throwing method.]]>
1050*dc5640d1SHerbert Xue      </doc>
1051*dc5640d1SHerbert Xue    </method>
1052*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
1053*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1054*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1055*dc5640d1SHerbert Xue      deprecated="not deprecated">
1056*dc5640d1SHerbert Xue    </method>
1057*dc5640d1SHerbert Xue    <doc>
1058*dc5640d1SHerbert Xue    <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
1059*dc5640d1SHerbert Xue scope is found. Clients should catch this exception, log it, and stop execution.
1060*dc5640d1SHerbert Xue
1061*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1062*dc5640d1SHerbert Xue @since 2.0]]>
1063*dc5640d1SHerbert Xue    </doc>
1064*dc5640d1SHerbert Xue  </class>
1065*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ConfigurationException -->
1066*dc5640d1SHerbert Xue  <!-- start class com.google.inject.CreationException -->
1067*dc5640d1SHerbert Xue  <class name="CreationException" extends="java.lang.RuntimeException"
1068*dc5640d1SHerbert Xue    abstract="false"
1069*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1070*dc5640d1SHerbert Xue    deprecated="not deprecated">
1071*dc5640d1SHerbert Xue    <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1072*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1073*dc5640d1SHerbert Xue      deprecated="not deprecated">
1074*dc5640d1SHerbert Xue      <doc>
1075*dc5640d1SHerbert Xue      <![CDATA[Creates a CreationException containing {@code messages}.]]>
1076*dc5640d1SHerbert Xue      </doc>
1077*dc5640d1SHerbert Xue    </constructor>
1078*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
1079*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1080*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1081*dc5640d1SHerbert Xue      deprecated="not deprecated">
1082*dc5640d1SHerbert Xue      <doc>
1083*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
1084*dc5640d1SHerbert Xue      </doc>
1085*dc5640d1SHerbert Xue    </method>
1086*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
1087*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1088*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1089*dc5640d1SHerbert Xue      deprecated="not deprecated">
1090*dc5640d1SHerbert Xue    </method>
1091*dc5640d1SHerbert Xue    <doc>
1092*dc5640d1SHerbert Xue    <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
1093*dc5640d1SHerbert Xue errors. Clients should catch this exception, log it, and stop execution.
1094*dc5640d1SHerbert Xue
1095*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1096*dc5640d1SHerbert Xue    </doc>
1097*dc5640d1SHerbert Xue  </class>
1098*dc5640d1SHerbert Xue  <!-- end class com.google.inject.CreationException -->
1099*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Exposed -->
1100*dc5640d1SHerbert Xue  <class name="Exposed"    abstract="true"
1101*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1102*dc5640d1SHerbert Xue    deprecated="not deprecated">
1103*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1104*dc5640d1SHerbert Xue    <doc>
1105*dc5640d1SHerbert Xue    <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
1106*dc5640d1SHerbert Xue private module to indicate that the provided binding is exposed.
1107*dc5640d1SHerbert Xue
1108*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1109*dc5640d1SHerbert Xue @since 2.0]]>
1110*dc5640d1SHerbert Xue    </doc>
1111*dc5640d1SHerbert Xue  </class>
1112*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Exposed -->
1113*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Guice -->
1114*dc5640d1SHerbert Xue  <class name="Guice" extends="java.lang.Object"
1115*dc5640d1SHerbert Xue    abstract="false"
1116*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1117*dc5640d1SHerbert Xue    deprecated="not deprecated">
1118*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1119*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1120*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1121*dc5640d1SHerbert Xue      deprecated="not deprecated">
1122*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1123*dc5640d1SHerbert Xue      <doc>
1124*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1125*dc5640d1SHerbert Xue calling {@link #createInjector(Stage, Module...)} with Stage.DEVELOPMENT.
1126*dc5640d1SHerbert Xue
1127*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1128*dc5640d1SHerbert Xue     construction]]>
1129*dc5640d1SHerbert Xue      </doc>
1130*dc5640d1SHerbert Xue    </method>
1131*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1132*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1133*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1134*dc5640d1SHerbert Xue      deprecated="not deprecated">
1135*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1136*dc5640d1SHerbert Xue      <doc>
1137*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules. This is equivalent to
1138*dc5640d1SHerbert Xue calling {@link #createInjector(Stage, Iterable)} with Stage.DEVELOPMENT.
1139*dc5640d1SHerbert Xue
1140*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1141*dc5640d1SHerbert Xue     creation]]>
1142*dc5640d1SHerbert Xue      </doc>
1143*dc5640d1SHerbert Xue    </method>
1144*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1145*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1146*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1147*dc5640d1SHerbert Xue      deprecated="not deprecated">
1148*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1149*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1150*dc5640d1SHerbert Xue      <doc>
1151*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1152*dc5640d1SHerbert Xue stage.
1153*dc5640d1SHerbert Xue
1154*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1155*dc5640d1SHerbert Xue     creation.]]>
1156*dc5640d1SHerbert Xue      </doc>
1157*dc5640d1SHerbert Xue    </method>
1158*dc5640d1SHerbert Xue    <method name="createInjector" return="com.google.inject.Injector"
1159*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1160*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1161*dc5640d1SHerbert Xue      deprecated="not deprecated">
1162*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
1163*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1164*dc5640d1SHerbert Xue      <doc>
1165*dc5640d1SHerbert Xue      <![CDATA[Creates an injector for the given set of modules, in a given development
1166*dc5640d1SHerbert Xue stage.
1167*dc5640d1SHerbert Xue
1168*dc5640d1SHerbert Xue @throws CreationException if one or more errors occur during injector
1169*dc5640d1SHerbert Xue     construction]]>
1170*dc5640d1SHerbert Xue      </doc>
1171*dc5640d1SHerbert Xue    </method>
1172*dc5640d1SHerbert Xue    <doc>
1173*dc5640d1SHerbert Xue    <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
1174*dc5640d1SHerbert Xue {@link Module}s.
1175*dc5640d1SHerbert Xue
1176*dc5640d1SHerbert Xue <p>Guice supports a model of development that draws clear boundaries between
1177*dc5640d1SHerbert Xue APIs, Implementations of these APIs, Modules which configure these
1178*dc5640d1SHerbert Xue implementations, and finally Applications which consist of a collection of
1179*dc5640d1SHerbert Xue Modules. It is the Application, which typically defines your {@code main()}
1180*dc5640d1SHerbert Xue method, that bootstraps the Guice Injector using the {@code Guice} class, as
1181*dc5640d1SHerbert Xue in this example:
1182*dc5640d1SHerbert Xue <pre>
1183*dc5640d1SHerbert Xue     public class FooApplication {
1184*dc5640d1SHerbert Xue       public static void main(String[] args) {
1185*dc5640d1SHerbert Xue         Injector injector = Guice.createInjector(
1186*dc5640d1SHerbert Xue             new ModuleA(),
1187*dc5640d1SHerbert Xue             new ModuleB(),
1188*dc5640d1SHerbert Xue             . . .
1189*dc5640d1SHerbert Xue             new FooApplicationFlagsModule(args)
1190*dc5640d1SHerbert Xue         );
1191*dc5640d1SHerbert Xue
1192*dc5640d1SHerbert Xue         // Now just bootstrap the application and you're done
1193*dc5640d1SHerbert Xue         FooStarter starter = injector.getInstance(FooStarter.class);
1194*dc5640d1SHerbert Xue         starter.runApplication();
1195*dc5640d1SHerbert Xue       }
1196*dc5640d1SHerbert Xue     }
1197*dc5640d1SHerbert Xue </pre>]]>
1198*dc5640d1SHerbert Xue    </doc>
1199*dc5640d1SHerbert Xue  </class>
1200*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Guice -->
1201*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ImplementedBy -->
1202*dc5640d1SHerbert Xue  <class name="ImplementedBy"    abstract="true"
1203*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1204*dc5640d1SHerbert Xue    deprecated="not deprecated">
1205*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1206*dc5640d1SHerbert Xue    <doc>
1207*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default implementation of a type.
1208*dc5640d1SHerbert Xue
1209*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1210*dc5640d1SHerbert Xue    </doc>
1211*dc5640d1SHerbert Xue  </class>
1212*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ImplementedBy -->
1213*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Inject -->
1214*dc5640d1SHerbert Xue  <class name="Inject"    abstract="true"
1215*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1216*dc5640d1SHerbert Xue    deprecated="not deprecated">
1217*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
1218*dc5640d1SHerbert Xue    <doc>
1219*dc5640d1SHerbert Xue    <![CDATA[Annotates members of your implementation class (constructors, methods
1220*dc5640d1SHerbert Xue and fields) into which the {@link Injector} should inject values.
1221*dc5640d1SHerbert Xue The Injector fulfills injection requests for:
1222*dc5640d1SHerbert Xue
1223*dc5640d1SHerbert Xue <ul>
1224*dc5640d1SHerbert Xue <li>Every instance it constructs. The class being constructed must have
1225*dc5640d1SHerbert Xue exactly one of its constructors marked with {@code @Inject} or must have a
1226*dc5640d1SHerbert Xue constructor taking no parameters. The Injector then proceeds to perform
1227*dc5640d1SHerbert Xue field and method injections.
1228*dc5640d1SHerbert Xue
1229*dc5640d1SHerbert Xue <li>Pre-constructed instances passed to {@link Injector#injectMembers},
1230*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
1231*dc5640d1SHerbert Xue {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(javax.inject.Provider)}.
1232*dc5640d1SHerbert Xue In this case all constructors are, of course, ignored.
1233*dc5640d1SHerbert Xue
1234*dc5640d1SHerbert Xue <li>Static fields and methods of classes which any {@link Module} has
1235*dc5640d1SHerbert Xue specifically requested static injection for, using
1236*dc5640d1SHerbert Xue {@link Binder#requestStaticInjection}.
1237*dc5640d1SHerbert Xue </ul>
1238*dc5640d1SHerbert Xue
1239*dc5640d1SHerbert Xue In all cases, a member can be injected regardless of its Java access
1240*dc5640d1SHerbert Xue specifier (private, default, protected, public).
1241*dc5640d1SHerbert Xue
1242*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1243*dc5640d1SHerbert Xue    </doc>
1244*dc5640d1SHerbert Xue  </class>
1245*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Inject -->
1246*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Injector -->
1247*dc5640d1SHerbert Xue  <interface name="Injector"    abstract="true"
1248*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1249*dc5640d1SHerbert Xue    deprecated="not deprecated">
1250*dc5640d1SHerbert Xue    <method name="injectMembers"
1251*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1252*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1253*dc5640d1SHerbert Xue      deprecated="not deprecated">
1254*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
1255*dc5640d1SHerbert Xue      <doc>
1256*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1257*dc5640d1SHerbert Xue absence of an injectable constructor.
1258*dc5640d1SHerbert Xue
1259*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1260*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1261*dc5640d1SHerbert Xue you, you'll never need to use this method.
1262*dc5640d1SHerbert Xue
1263*dc5640d1SHerbert Xue @param instance to inject members on
1264*dc5640d1SHerbert Xue
1265*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
1266*dc5640d1SHerbert Xue  run time]]>
1267*dc5640d1SHerbert Xue      </doc>
1268*dc5640d1SHerbert Xue    </method>
1269*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1270*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1271*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1272*dc5640d1SHerbert Xue      deprecated="not deprecated">
1273*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1274*dc5640d1SHerbert Xue      <doc>
1275*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1276*dc5640d1SHerbert Xue of the given type {@code T}.
1277*dc5640d1SHerbert Xue
1278*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for
1279*dc5640d1SHerbert Xue @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
1280*dc5640d1SHerbert Xue  detection
1281*dc5640d1SHerbert Xue @since 2.0]]>
1282*dc5640d1SHerbert Xue      </doc>
1283*dc5640d1SHerbert Xue    </method>
1284*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
1285*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1286*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1287*dc5640d1SHerbert Xue      deprecated="not deprecated">
1288*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1289*dc5640d1SHerbert Xue      <doc>
1290*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
1291*dc5640d1SHerbert Xue of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
1292*dc5640d1SHerbert Xue instead to get increased up front error detection.
1293*dc5640d1SHerbert Xue
1294*dc5640d1SHerbert Xue @param type type to get members injector for
1295*dc5640d1SHerbert Xue @see Binder#getMembersInjector(Class) for an alternative that offers up front error
1296*dc5640d1SHerbert Xue  detection
1297*dc5640d1SHerbert Xue @since 2.0]]>
1298*dc5640d1SHerbert Xue      </doc>
1299*dc5640d1SHerbert Xue    </method>
1300*dc5640d1SHerbert Xue    <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1301*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1302*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1303*dc5640d1SHerbert Xue      deprecated="not deprecated">
1304*dc5640d1SHerbert Xue      <doc>
1305*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's <strong>explicit</strong> bindings.
1306*dc5640d1SHerbert Xue
1307*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1308*dc5640d1SHerbert Xue injector}, should one exist. The returned map is guaranteed to iterate (for example, with
1309*dc5640d1SHerbert Xue its {@link Map#entrySet()} iterator) in the order of insertion. In other words, the order in
1310*dc5640d1SHerbert Xue which bindings appear in user Modules.
1311*dc5640d1SHerbert Xue
1312*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1313*dc5640d1SHerbert Xue      </doc>
1314*dc5640d1SHerbert Xue    </method>
1315*dc5640d1SHerbert Xue    <method name="getAllBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
1316*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1317*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1318*dc5640d1SHerbert Xue      deprecated="not deprecated">
1319*dc5640d1SHerbert Xue      <doc>
1320*dc5640d1SHerbert Xue      <![CDATA[Returns a snapshot of this injector's bindings, <strong>both explicit and
1321*dc5640d1SHerbert Xue just-in-time</strong>. The returned map is immutable; it contains only the bindings that were
1322*dc5640d1SHerbert Xue present when {@code getAllBindings()} was invoked. Subsequent calls may return a map with
1323*dc5640d1SHerbert Xue additional just-in-time bindings.
1324*dc5640d1SHerbert Xue
1325*dc5640d1SHerbert Xue <p>The returned map does not include bindings inherited from a {@link #getParent() parent
1326*dc5640d1SHerbert Xue injector}, should one exist.
1327*dc5640d1SHerbert Xue
1328*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1329*dc5640d1SHerbert Xue
1330*dc5640d1SHerbert Xue @since 3.0]]>
1331*dc5640d1SHerbert Xue      </doc>
1332*dc5640d1SHerbert Xue    </method>
1333*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1334*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1335*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1336*dc5640d1SHerbert Xue      deprecated="not deprecated">
1337*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1338*dc5640d1SHerbert Xue      <doc>
1339*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
1340*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1341*dc5640d1SHerbert Xue be created if necessary.
1342*dc5640d1SHerbert Xue
1343*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1344*dc5640d1SHerbert Xue
1345*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.]]>
1346*dc5640d1SHerbert Xue      </doc>
1347*dc5640d1SHerbert Xue    </method>
1348*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
1349*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1350*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1351*dc5640d1SHerbert Xue      deprecated="not deprecated">
1352*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1353*dc5640d1SHerbert Xue      <doc>
1354*dc5640d1SHerbert Xue      <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
1355*dc5640d1SHerbert Xue was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
1356*dc5640d1SHerbert Xue be created if necessary.
1357*dc5640d1SHerbert Xue
1358*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1359*dc5640d1SHerbert Xue
1360*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the binding.
1361*dc5640d1SHerbert Xue @since 2.0]]>
1362*dc5640d1SHerbert Xue      </doc>
1363*dc5640d1SHerbert Xue    </method>
1364*dc5640d1SHerbert Xue    <method name="getExistingBinding" return="com.google.inject.Binding&lt;T&gt;"
1365*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1366*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1367*dc5640d1SHerbert Xue      deprecated="not deprecated">
1368*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1369*dc5640d1SHerbert Xue      <doc>
1370*dc5640d1SHerbert Xue      <![CDATA[Returns the binding if it already exists, or null if does not exist. Unlike
1371*dc5640d1SHerbert Xue {@link #getBinding(Key)}, this does not attempt to create just-in-time bindings
1372*dc5640d1SHerbert Xue for keys that aren't bound.
1373*dc5640d1SHerbert Xue
1374*dc5640d1SHerbert Xue <p> This method is part of the Guice SPI and is intended for use by tools and extensions.
1375*dc5640d1SHerbert Xue
1376*dc5640d1SHerbert Xue @since 3.0]]>
1377*dc5640d1SHerbert Xue      </doc>
1378*dc5640d1SHerbert Xue    </method>
1379*dc5640d1SHerbert Xue    <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
1380*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1381*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1382*dc5640d1SHerbert Xue      deprecated="not deprecated">
1383*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1384*dc5640d1SHerbert Xue      <doc>
1385*dc5640d1SHerbert Xue      <![CDATA[Returns all explicit bindings for {@code type}.
1386*dc5640d1SHerbert Xue
1387*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
1388*dc5640d1SHerbert Xue      </doc>
1389*dc5640d1SHerbert Xue    </method>
1390*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1391*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1392*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1393*dc5640d1SHerbert Xue      deprecated="not deprecated">
1394*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1395*dc5640d1SHerbert Xue      <doc>
1396*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
1397*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1398*dc5640d1SHerbert Xue
1399*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1400*dc5640d1SHerbert Xue @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
1401*dc5640d1SHerbert Xue      </doc>
1402*dc5640d1SHerbert Xue    </method>
1403*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
1404*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1405*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1406*dc5640d1SHerbert Xue      deprecated="not deprecated">
1407*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1408*dc5640d1SHerbert Xue      <doc>
1409*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
1410*dc5640d1SHerbert Xue using this method, in favor of having Guice inject your dependencies ahead of time.
1411*dc5640d1SHerbert Xue
1412*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1413*dc5640d1SHerbert Xue @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
1414*dc5640d1SHerbert Xue      </doc>
1415*dc5640d1SHerbert Xue    </method>
1416*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1417*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1418*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1419*dc5640d1SHerbert Xue      deprecated="not deprecated">
1420*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1421*dc5640d1SHerbert Xue      <doc>
1422*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
1423*dc5640d1SHerbert Xue getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
1424*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1425*dc5640d1SHerbert Xue
1426*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1427*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1428*dc5640d1SHerbert Xue      </doc>
1429*dc5640d1SHerbert Xue    </method>
1430*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
1431*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1432*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1433*dc5640d1SHerbert Xue      deprecated="not deprecated">
1434*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1435*dc5640d1SHerbert Xue      <doc>
1436*dc5640d1SHerbert Xue      <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
1437*dc5640d1SHerbert Xue getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
1438*dc5640d1SHerbert Xue inject your dependencies ahead of time.
1439*dc5640d1SHerbert Xue
1440*dc5640d1SHerbert Xue @throws ConfigurationException if this injector cannot find or create the provider.
1441*dc5640d1SHerbert Xue @throws ProvisionException if there was a runtime failure while providing an instance.]]>
1442*dc5640d1SHerbert Xue      </doc>
1443*dc5640d1SHerbert Xue    </method>
1444*dc5640d1SHerbert Xue    <method name="getParent" return="com.google.inject.Injector"
1445*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1446*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1447*dc5640d1SHerbert Xue      deprecated="not deprecated">
1448*dc5640d1SHerbert Xue      <doc>
1449*dc5640d1SHerbert Xue      <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
1450*dc5640d1SHerbert Xue
1451*dc5640d1SHerbert Xue @since 2.0]]>
1452*dc5640d1SHerbert Xue      </doc>
1453*dc5640d1SHerbert Xue    </method>
1454*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1455*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1456*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1457*dc5640d1SHerbert Xue      deprecated="not deprecated">
1458*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
1459*dc5640d1SHerbert Xue      <doc>
1460*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1461*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1462*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1463*dc5640d1SHerbert Xue
1464*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1465*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1466*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.  Optional
1467*dc5640d1SHerbert Xue injections in just-in-time bindings (created in the parent injector) may be silently
1468*dc5640d1SHerbert Xue ignored if the optional dependencies are from the child injector.
1469*dc5640d1SHerbert Xue
1470*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1471*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1472*dc5640d1SHerbert Xue injector to itself.
1473*dc5640d1SHerbert Xue
1474*dc5640d1SHerbert Xue @since 2.0]]>
1475*dc5640d1SHerbert Xue      </doc>
1476*dc5640d1SHerbert Xue    </method>
1477*dc5640d1SHerbert Xue    <method name="createChildInjector" return="com.google.inject.Injector"
1478*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1479*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1480*dc5640d1SHerbert Xue      deprecated="not deprecated">
1481*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
1482*dc5640d1SHerbert Xue      <doc>
1483*dc5640d1SHerbert Xue      <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
1484*dc5640d1SHerbert Xue interceptors and type converters are inherited -- they are visible to the child injector.
1485*dc5640d1SHerbert Xue Elements of the child injector are not visible to its parent.
1486*dc5640d1SHerbert Xue
1487*dc5640d1SHerbert Xue <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
1488*dc5640d1SHerbert Xue whenever possible. This allows for scoped instances to be shared between injectors. Use
1489*dc5640d1SHerbert Xue explicit bindings to prevent bindings from being shared with the parent injector.
1490*dc5640d1SHerbert Xue
1491*dc5640d1SHerbert Xue <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
1492*dc5640d1SHerbert Xue bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
1493*dc5640d1SHerbert Xue injector to itself.
1494*dc5640d1SHerbert Xue
1495*dc5640d1SHerbert Xue @since 2.0]]>
1496*dc5640d1SHerbert Xue      </doc>
1497*dc5640d1SHerbert Xue    </method>
1498*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;"
1499*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1500*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1501*dc5640d1SHerbert Xue      deprecated="not deprecated">
1502*dc5640d1SHerbert Xue      <doc>
1503*dc5640d1SHerbert Xue      <![CDATA[Returns a map containing all scopes in the injector. The maps keys are scoping annotations
1504*dc5640d1SHerbert Xue like {@code Singleton.class}, and the values are scope instances, such as {@code
1505*dc5640d1SHerbert Xue Scopes.SINGLETON}. The returned map is immutable.
1506*dc5640d1SHerbert Xue
1507*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1508*dc5640d1SHerbert Xue
1509*dc5640d1SHerbert Xue @since 3.0]]>
1510*dc5640d1SHerbert Xue      </doc>
1511*dc5640d1SHerbert Xue    </method>
1512*dc5640d1SHerbert Xue    <method name="getTypeConverterBindings" return="java.util.Set&lt;com.google.inject.spi.TypeConverterBinding&gt;"
1513*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1514*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1515*dc5640d1SHerbert Xue      deprecated="not deprecated">
1516*dc5640d1SHerbert Xue      <doc>
1517*dc5640d1SHerbert Xue      <![CDATA[Returns a set containing all type converter bindings in the injector. The returned set is
1518*dc5640d1SHerbert Xue immutable.
1519*dc5640d1SHerbert Xue
1520*dc5640d1SHerbert Xue <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
1521*dc5640d1SHerbert Xue
1522*dc5640d1SHerbert Xue @since 3.0]]>
1523*dc5640d1SHerbert Xue      </doc>
1524*dc5640d1SHerbert Xue    </method>
1525*dc5640d1SHerbert Xue    <doc>
1526*dc5640d1SHerbert Xue    <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
1527*dc5640d1SHerbert Xue for each type and uses bindings to inject them. This is the core of Guice, although you rarely
1528*dc5640d1SHerbert Xue interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
1529*dc5640d1SHerbert Xue injection from its cousin, the service locator pattern.
1530*dc5640d1SHerbert Xue
1531*dc5640d1SHerbert Xue <p>Contains several default bindings:
1532*dc5640d1SHerbert Xue
1533*dc5640d1SHerbert Xue <ul>
1534*dc5640d1SHerbert Xue <li>This {@link Injector} instance itself
1535*dc5640d1SHerbert Xue <li>A {@code Provider<T>} for each binding of type {@code T}
1536*dc5640d1SHerbert Xue <li>The {@link java.util.logging.Logger} for the class being injected
1537*dc5640d1SHerbert Xue <li>The {@link Stage} in which the Injector was created
1538*dc5640d1SHerbert Xue </ul>
1539*dc5640d1SHerbert Xue
1540*dc5640d1SHerbert Xue Injectors are created using the facade class {@link Guice}.
1541*dc5640d1SHerbert Xue
1542*dc5640d1SHerbert Xue <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
1543*dc5640d1SHerbert Xue already-constructed instances. This can be used to interoperate with objects created by other
1544*dc5640d1SHerbert Xue frameworks or services.
1545*dc5640d1SHerbert Xue
1546*dc5640d1SHerbert Xue <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
1547*dc5640d1SHerbert Xue the configuration of their parent injectors, but the converse does not hold.
1548*dc5640d1SHerbert Xue
1549*dc5640d1SHerbert Xue <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
1550*dc5640d1SHerbert Xue enables tools and extensions to operate on an injector reflectively.
1551*dc5640d1SHerbert Xue
1552*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1553*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
1554*dc5640d1SHerbert Xue    </doc>
1555*dc5640d1SHerbert Xue  </interface>
1556*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Injector -->
1557*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Key -->
1558*dc5640d1SHerbert Xue  <class name="Key" extends="java.lang.Object"
1559*dc5640d1SHerbert Xue    abstract="false"
1560*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1561*dc5640d1SHerbert Xue    deprecated="not deprecated">
1562*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1563*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1564*dc5640d1SHerbert Xue      deprecated="not deprecated">
1565*dc5640d1SHerbert Xue      <doc>
1566*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1567*dc5640d1SHerbert Xue
1568*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1569*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1570*dc5640d1SHerbert Xue at runtime despite erasure.
1571*dc5640d1SHerbert Xue
1572*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1573*dc5640d1SHerbert Xue {@code @Bar}:
1574*dc5640d1SHerbert Xue
1575*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(Bar.class) {}}.]]>
1576*dc5640d1SHerbert Xue      </doc>
1577*dc5640d1SHerbert Xue    </constructor>
1578*dc5640d1SHerbert Xue    <constructor name="Key" type="java.lang.annotation.Annotation"
1579*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1580*dc5640d1SHerbert Xue      deprecated="not deprecated">
1581*dc5640d1SHerbert Xue      <doc>
1582*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1583*dc5640d1SHerbert Xue
1584*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1585*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1586*dc5640d1SHerbert Xue at runtime despite erasure.
1587*dc5640d1SHerbert Xue
1588*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo} annotated with
1589*dc5640d1SHerbert Xue {@code @Bar}:
1590*dc5640d1SHerbert Xue
1591*dc5640d1SHerbert Xue <p>{@code new Key<Foo>(new Bar()) {}}.]]>
1592*dc5640d1SHerbert Xue      </doc>
1593*dc5640d1SHerbert Xue    </constructor>
1594*dc5640d1SHerbert Xue    <constructor name="Key"
1595*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1596*dc5640d1SHerbert Xue      deprecated="not deprecated">
1597*dc5640d1SHerbert Xue      <doc>
1598*dc5640d1SHerbert Xue      <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
1599*dc5640d1SHerbert Xue
1600*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
1601*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
1602*dc5640d1SHerbert Xue at runtime despite erasure.
1603*dc5640d1SHerbert Xue
1604*dc5640d1SHerbert Xue <p>Example usage for a binding of type {@code Foo}:
1605*dc5640d1SHerbert Xue
1606*dc5640d1SHerbert Xue <p>{@code new Key<Foo>() {}}.]]>
1607*dc5640d1SHerbert Xue      </doc>
1608*dc5640d1SHerbert Xue    </constructor>
1609*dc5640d1SHerbert Xue    <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
1610*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1611*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1612*dc5640d1SHerbert Xue      deprecated="not deprecated">
1613*dc5640d1SHerbert Xue      <doc>
1614*dc5640d1SHerbert Xue      <![CDATA[Gets the key type.]]>
1615*dc5640d1SHerbert Xue      </doc>
1616*dc5640d1SHerbert Xue    </method>
1617*dc5640d1SHerbert Xue    <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
1618*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1619*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1620*dc5640d1SHerbert Xue      deprecated="not deprecated">
1621*dc5640d1SHerbert Xue      <doc>
1622*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation type.]]>
1623*dc5640d1SHerbert Xue      </doc>
1624*dc5640d1SHerbert Xue    </method>
1625*dc5640d1SHerbert Xue    <method name="getAnnotation" return="java.lang.annotation.Annotation"
1626*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1627*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1628*dc5640d1SHerbert Xue      deprecated="not deprecated">
1629*dc5640d1SHerbert Xue      <doc>
1630*dc5640d1SHerbert Xue      <![CDATA[Gets the annotation.]]>
1631*dc5640d1SHerbert Xue      </doc>
1632*dc5640d1SHerbert Xue    </method>
1633*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
1634*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1635*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1636*dc5640d1SHerbert Xue      deprecated="not deprecated">
1637*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
1638*dc5640d1SHerbert Xue    </method>
1639*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
1640*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1641*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1642*dc5640d1SHerbert Xue      deprecated="not deprecated">
1643*dc5640d1SHerbert Xue    </method>
1644*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
1645*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1646*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1647*dc5640d1SHerbert Xue      deprecated="not deprecated">
1648*dc5640d1SHerbert Xue    </method>
1649*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1650*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1651*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1652*dc5640d1SHerbert Xue      deprecated="not deprecated">
1653*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1654*dc5640d1SHerbert Xue      <doc>
1655*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1656*dc5640d1SHerbert Xue      </doc>
1657*dc5640d1SHerbert Xue    </method>
1658*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1659*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1660*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1661*dc5640d1SHerbert Xue      deprecated="not deprecated">
1662*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1663*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1664*dc5640d1SHerbert Xue      <doc>
1665*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1666*dc5640d1SHerbert Xue      </doc>
1667*dc5640d1SHerbert Xue    </method>
1668*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1669*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1670*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1671*dc5640d1SHerbert Xue      deprecated="not deprecated">
1672*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1673*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1674*dc5640d1SHerbert Xue      <doc>
1675*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1676*dc5640d1SHerbert Xue      </doc>
1677*dc5640d1SHerbert Xue    </method>
1678*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1679*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1680*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1681*dc5640d1SHerbert Xue      deprecated="not deprecated">
1682*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1683*dc5640d1SHerbert Xue      <doc>
1684*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1685*dc5640d1SHerbert Xue      </doc>
1686*dc5640d1SHerbert Xue    </method>
1687*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1688*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1689*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1690*dc5640d1SHerbert Xue      deprecated="not deprecated">
1691*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1692*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1693*dc5640d1SHerbert Xue      <doc>
1694*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1695*dc5640d1SHerbert Xue      </doc>
1696*dc5640d1SHerbert Xue    </method>
1697*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;?&gt;"
1698*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1699*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1700*dc5640d1SHerbert Xue      deprecated="not deprecated">
1701*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1702*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1703*dc5640d1SHerbert Xue      <doc>
1704*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1705*dc5640d1SHerbert Xue      </doc>
1706*dc5640d1SHerbert Xue    </method>
1707*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1708*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1709*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1710*dc5640d1SHerbert Xue      deprecated="not deprecated">
1711*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1712*dc5640d1SHerbert Xue      <doc>
1713*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type.]]>
1714*dc5640d1SHerbert Xue      </doc>
1715*dc5640d1SHerbert Xue    </method>
1716*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1717*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1718*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1719*dc5640d1SHerbert Xue      deprecated="not deprecated">
1720*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1721*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
1722*dc5640d1SHerbert Xue      <doc>
1723*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation type.]]>
1724*dc5640d1SHerbert Xue      </doc>
1725*dc5640d1SHerbert Xue    </method>
1726*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.Key&lt;T&gt;"
1727*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1728*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
1729*dc5640d1SHerbert Xue      deprecated="not deprecated">
1730*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1731*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
1732*dc5640d1SHerbert Xue      <doc>
1733*dc5640d1SHerbert Xue      <![CDATA[Gets a key for an injection type and an annotation.]]>
1734*dc5640d1SHerbert Xue      </doc>
1735*dc5640d1SHerbert Xue    </method>
1736*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1737*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1738*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1739*dc5640d1SHerbert Xue      deprecated="not deprecated">
1740*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
1741*dc5640d1SHerbert Xue      <doc>
1742*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1743*dc5640d1SHerbert Xue key.
1744*dc5640d1SHerbert Xue
1745*dc5640d1SHerbert Xue @since 3.0]]>
1746*dc5640d1SHerbert Xue      </doc>
1747*dc5640d1SHerbert Xue    </method>
1748*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;?&gt;"
1749*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1750*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1751*dc5640d1SHerbert Xue      deprecated="not deprecated">
1752*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
1753*dc5640d1SHerbert Xue      <doc>
1754*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1755*dc5640d1SHerbert Xue key.
1756*dc5640d1SHerbert Xue
1757*dc5640d1SHerbert Xue @since 3.0]]>
1758*dc5640d1SHerbert Xue      </doc>
1759*dc5640d1SHerbert Xue    </method>
1760*dc5640d1SHerbert Xue    <method name="ofType" return="com.google.inject.Key&lt;T&gt;"
1761*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1762*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1763*dc5640d1SHerbert Xue      deprecated="not deprecated">
1764*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
1765*dc5640d1SHerbert Xue      <doc>
1766*dc5640d1SHerbert Xue      <![CDATA[Returns a new key of the specified type with the same annotation as this
1767*dc5640d1SHerbert Xue key.
1768*dc5640d1SHerbert Xue
1769*dc5640d1SHerbert Xue @since 3.0]]>
1770*dc5640d1SHerbert Xue      </doc>
1771*dc5640d1SHerbert Xue    </method>
1772*dc5640d1SHerbert Xue    <method name="hasAttributes" return="boolean"
1773*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1774*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1775*dc5640d1SHerbert Xue      deprecated="not deprecated">
1776*dc5640d1SHerbert Xue      <doc>
1777*dc5640d1SHerbert Xue      <![CDATA[Returns true if this key has annotation attributes.
1778*dc5640d1SHerbert Xue
1779*dc5640d1SHerbert Xue @since 3.0]]>
1780*dc5640d1SHerbert Xue      </doc>
1781*dc5640d1SHerbert Xue    </method>
1782*dc5640d1SHerbert Xue    <method name="withoutAttributes" return="com.google.inject.Key&lt;T&gt;"
1783*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1784*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1785*dc5640d1SHerbert Xue      deprecated="not deprecated">
1786*dc5640d1SHerbert Xue      <doc>
1787*dc5640d1SHerbert Xue      <![CDATA[Returns this key without annotation attributes, i.e. with only the
1788*dc5640d1SHerbert Xue annotation type.
1789*dc5640d1SHerbert Xue
1790*dc5640d1SHerbert Xue @since 3.0]]>
1791*dc5640d1SHerbert Xue      </doc>
1792*dc5640d1SHerbert Xue    </method>
1793*dc5640d1SHerbert Xue    <doc>
1794*dc5640d1SHerbert Xue    <![CDATA[Binding key consisting of an injection type and an optional annotation.
1795*dc5640d1SHerbert Xue Matches the type and annotation at a point of injection.
1796*dc5640d1SHerbert Xue
1797*dc5640d1SHerbert Xue <p>For example, {@code Key.get(Service.class, Transactional.class)} will
1798*dc5640d1SHerbert Xue match:
1799*dc5640d1SHerbert Xue
1800*dc5640d1SHerbert Xue <pre>
1801*dc5640d1SHerbert Xue   {@literal @}Inject
1802*dc5640d1SHerbert Xue   public void setService({@literal @}Transactional Service service) {
1803*dc5640d1SHerbert Xue     ...
1804*dc5640d1SHerbert Xue   }
1805*dc5640d1SHerbert Xue </pre>
1806*dc5640d1SHerbert Xue
1807*dc5640d1SHerbert Xue <p>{@code Key} supports generic types via subclassing just like {@link
1808*dc5640d1SHerbert Xue TypeLiteral}.
1809*dc5640d1SHerbert Xue
1810*dc5640d1SHerbert Xue <p>Keys do not differentiate between primitive types (int, char, etc.) and
1811*dc5640d1SHerbert Xue their corresponding wrapper types (Integer, Character, etc.). Primitive
1812*dc5640d1SHerbert Xue types will be replaced with their wrapper types when keys are created.
1813*dc5640d1SHerbert Xue
1814*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
1815*dc5640d1SHerbert Xue    </doc>
1816*dc5640d1SHerbert Xue  </class>
1817*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Key -->
1818*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.MembersInjector -->
1819*dc5640d1SHerbert Xue  <interface name="MembersInjector"    abstract="true"
1820*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1821*dc5640d1SHerbert Xue    deprecated="not deprecated">
1822*dc5640d1SHerbert Xue    <method name="injectMembers"
1823*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1824*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1825*dc5640d1SHerbert Xue      deprecated="not deprecated">
1826*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
1827*dc5640d1SHerbert Xue      <doc>
1828*dc5640d1SHerbert Xue      <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
1829*dc5640d1SHerbert Xue absence of an injectable constructor.
1830*dc5640d1SHerbert Xue
1831*dc5640d1SHerbert Xue <p>Whenever Guice creates an instance, it performs this injection automatically (after first
1832*dc5640d1SHerbert Xue performing constructor injection), so if you're able to let Guice create all your objects for
1833*dc5640d1SHerbert Xue you, you'll never need to use this method.
1834*dc5640d1SHerbert Xue
1835*dc5640d1SHerbert Xue @param instance to inject members on. May be {@code null}.]]>
1836*dc5640d1SHerbert Xue      </doc>
1837*dc5640d1SHerbert Xue    </method>
1838*dc5640d1SHerbert Xue    <doc>
1839*dc5640d1SHerbert Xue    <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
1840*dc5640d1SHerbert Xue presence or absence of an injectable constructor.
1841*dc5640d1SHerbert Xue
1842*dc5640d1SHerbert Xue @param <T> type to inject members of
1843*dc5640d1SHerbert Xue
1844*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
1845*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1846*dc5640d1SHerbert Xue @since 2.0]]>
1847*dc5640d1SHerbert Xue    </doc>
1848*dc5640d1SHerbert Xue  </interface>
1849*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.MembersInjector -->
1850*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Module -->
1851*dc5640d1SHerbert Xue  <interface name="Module"    abstract="true"
1852*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1853*dc5640d1SHerbert Xue    deprecated="not deprecated">
1854*dc5640d1SHerbert Xue    <method name="configure"
1855*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1856*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1857*dc5640d1SHerbert Xue      deprecated="not deprecated">
1858*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1859*dc5640d1SHerbert Xue      <doc>
1860*dc5640d1SHerbert Xue      <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
1861*dc5640d1SHerbert Xue
1862*dc5640d1SHerbert Xue <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
1863*dc5640d1SHerbert Xue {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
1864*dc5640d1SHerbert Xue discovered.]]>
1865*dc5640d1SHerbert Xue      </doc>
1866*dc5640d1SHerbert Xue    </method>
1867*dc5640d1SHerbert Xue    <doc>
1868*dc5640d1SHerbert Xue    <![CDATA[A module contributes configuration information, typically interface
1869*dc5640d1SHerbert Xue bindings, which will be used to create an {@link Injector}. A Guice-based
1870*dc5640d1SHerbert Xue application is ultimately composed of little more than a set of
1871*dc5640d1SHerbert Xue {@code Module}s and some bootstrapping code.
1872*dc5640d1SHerbert Xue
1873*dc5640d1SHerbert Xue <p>Your Module classes can use a more streamlined syntax by extending
1874*dc5640d1SHerbert Xue {@link AbstractModule} rather than implementing this interface directly.
1875*dc5640d1SHerbert Xue
1876*dc5640d1SHerbert Xue <p>In addition to the bindings configured via {@link #configure}, bindings
1877*dc5640d1SHerbert Xue will be created for all methods annotated with {@literal @}{@link Provides}.
1878*dc5640d1SHerbert Xue Use scope and binding annotations on these methods to configure the
1879*dc5640d1SHerbert Xue bindings.]]>
1880*dc5640d1SHerbert Xue    </doc>
1881*dc5640d1SHerbert Xue  </interface>
1882*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Module -->
1883*dc5640d1SHerbert Xue  <!-- start class com.google.inject.OutOfScopeException -->
1884*dc5640d1SHerbert Xue  <class name="OutOfScopeException" extends="java.lang.RuntimeException"
1885*dc5640d1SHerbert Xue    abstract="false"
1886*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
1887*dc5640d1SHerbert Xue    deprecated="not deprecated">
1888*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String"
1889*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1890*dc5640d1SHerbert Xue      deprecated="not deprecated">
1891*dc5640d1SHerbert Xue    </constructor>
1892*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
1893*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1894*dc5640d1SHerbert Xue      deprecated="not deprecated">
1895*dc5640d1SHerbert Xue    </constructor>
1896*dc5640d1SHerbert Xue    <constructor name="OutOfScopeException" type="java.lang.Throwable"
1897*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1898*dc5640d1SHerbert Xue      deprecated="not deprecated">
1899*dc5640d1SHerbert Xue    </constructor>
1900*dc5640d1SHerbert Xue    <doc>
1901*dc5640d1SHerbert Xue    <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
1902*dc5640d1SHerbert Xue object while the scope in question is not currently active.
1903*dc5640d1SHerbert Xue
1904*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
1905*dc5640d1SHerbert Xue @since 2.0]]>
1906*dc5640d1SHerbert Xue    </doc>
1907*dc5640d1SHerbert Xue  </class>
1908*dc5640d1SHerbert Xue  <!-- end class com.google.inject.OutOfScopeException -->
1909*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.PrivateBinder -->
1910*dc5640d1SHerbert Xue  <interface name="PrivateBinder"    abstract="true"
1911*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1912*dc5640d1SHerbert Xue    deprecated="not deprecated">
1913*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binder"/>
1914*dc5640d1SHerbert Xue    <method name="expose"
1915*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1916*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1917*dc5640d1SHerbert Xue      deprecated="not deprecated">
1918*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
1919*dc5640d1SHerbert Xue      <doc>
1920*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
1921*dc5640d1SHerbert Xue      </doc>
1922*dc5640d1SHerbert Xue    </method>
1923*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1924*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1925*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1926*dc5640d1SHerbert Xue      deprecated="not deprecated">
1927*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
1928*dc5640d1SHerbert Xue      <doc>
1929*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1930*dc5640d1SHerbert Xue com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1931*dc5640d1SHerbert Xue binding annotation.]]>
1932*dc5640d1SHerbert Xue      </doc>
1933*dc5640d1SHerbert Xue    </method>
1934*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
1935*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1936*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1937*dc5640d1SHerbert Xue      deprecated="not deprecated">
1938*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
1939*dc5640d1SHerbert Xue      <doc>
1940*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
1941*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
1942*dc5640d1SHerbert Xue binding annotation.]]>
1943*dc5640d1SHerbert Xue      </doc>
1944*dc5640d1SHerbert Xue    </method>
1945*dc5640d1SHerbert Xue    <method name="withSource" return="com.google.inject.PrivateBinder"
1946*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1947*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1948*dc5640d1SHerbert Xue      deprecated="not deprecated">
1949*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
1950*dc5640d1SHerbert Xue    </method>
1951*dc5640d1SHerbert Xue    <method name="skipSources" return="com.google.inject.PrivateBinder"
1952*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1953*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1954*dc5640d1SHerbert Xue      deprecated="not deprecated">
1955*dc5640d1SHerbert Xue      <param name="classesToSkip" type="java.lang.Class[]"/>
1956*dc5640d1SHerbert Xue    </method>
1957*dc5640d1SHerbert Xue    <doc>
1958*dc5640d1SHerbert Xue    <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
1959*dc5640d1SHerbert Xue {@link com.google.inject.PrivateModule PrivateModule} for details.
1960*dc5640d1SHerbert Xue
1961*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
1962*dc5640d1SHerbert Xue @since 2.0]]>
1963*dc5640d1SHerbert Xue    </doc>
1964*dc5640d1SHerbert Xue  </interface>
1965*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.PrivateBinder -->
1966*dc5640d1SHerbert Xue  <!-- start class com.google.inject.PrivateModule -->
1967*dc5640d1SHerbert Xue  <class name="PrivateModule" extends="java.lang.Object"
1968*dc5640d1SHerbert Xue    abstract="true"
1969*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
1970*dc5640d1SHerbert Xue    deprecated="not deprecated">
1971*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
1972*dc5640d1SHerbert Xue    <constructor name="PrivateModule"
1973*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
1974*dc5640d1SHerbert Xue      deprecated="not deprecated">
1975*dc5640d1SHerbert Xue    </constructor>
1976*dc5640d1SHerbert Xue    <method name="configure"
1977*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="true"
1978*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
1979*dc5640d1SHerbert Xue      deprecated="not deprecated">
1980*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
1981*dc5640d1SHerbert Xue    </method>
1982*dc5640d1SHerbert Xue    <method name="configure"
1983*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
1984*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
1985*dc5640d1SHerbert Xue      deprecated="not deprecated">
1986*dc5640d1SHerbert Xue      <doc>
1987*dc5640d1SHerbert Xue      <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
1988*dc5640d1SHerbert Xue expose()} to make the bindings in this module available externally.]]>
1989*dc5640d1SHerbert Xue      </doc>
1990*dc5640d1SHerbert Xue    </method>
1991*dc5640d1SHerbert Xue    <method name="expose"
1992*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
1993*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
1994*dc5640d1SHerbert Xue      deprecated="not deprecated">
1995*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
1996*dc5640d1SHerbert Xue      <doc>
1997*dc5640d1SHerbert Xue      <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
1998*dc5640d1SHerbert Xue      </doc>
1999*dc5640d1SHerbert Xue    </method>
2000*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2002*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2003*dc5640d1SHerbert Xue      deprecated="not deprecated">
2004*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2005*dc5640d1SHerbert Xue      <doc>
2006*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2007*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2008*dc5640d1SHerbert Xue binding annotation.]]>
2009*dc5640d1SHerbert Xue      </doc>
2010*dc5640d1SHerbert Xue    </method>
2011*dc5640d1SHerbert Xue    <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
2012*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2013*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2014*dc5640d1SHerbert Xue      deprecated="not deprecated">
2015*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
2016*dc5640d1SHerbert Xue      <doc>
2017*dc5640d1SHerbert Xue      <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
2018*dc5640d1SHerbert Xue AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
2019*dc5640d1SHerbert Xue binding annotation.]]>
2020*dc5640d1SHerbert Xue      </doc>
2021*dc5640d1SHerbert Xue    </method>
2022*dc5640d1SHerbert Xue    <method name="binder" return="com.google.inject.PrivateBinder"
2023*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2024*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2025*dc5640d1SHerbert Xue      deprecated="not deprecated">
2026*dc5640d1SHerbert Xue      <doc>
2027*dc5640d1SHerbert Xue      <![CDATA[Returns the current binder.]]>
2028*dc5640d1SHerbert Xue      </doc>
2029*dc5640d1SHerbert Xue    </method>
2030*dc5640d1SHerbert Xue    <method name="bindScope"
2031*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2032*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2033*dc5640d1SHerbert Xue      deprecated="not deprecated">
2034*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2035*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
2036*dc5640d1SHerbert Xue      <doc>
2037*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindScope(Class, Scope)]]>
2038*dc5640d1SHerbert Xue      </doc>
2039*dc5640d1SHerbert Xue    </method>
2040*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
2041*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2042*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2043*dc5640d1SHerbert Xue      deprecated="not deprecated">
2044*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2045*dc5640d1SHerbert Xue      <doc>
2046*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Key)]]>
2047*dc5640d1SHerbert Xue      </doc>
2048*dc5640d1SHerbert Xue    </method>
2049*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2050*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2051*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2052*dc5640d1SHerbert Xue      deprecated="not deprecated">
2053*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2054*dc5640d1SHerbert Xue      <doc>
2055*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(TypeLiteral)]]>
2056*dc5640d1SHerbert Xue      </doc>
2057*dc5640d1SHerbert Xue    </method>
2058*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
2059*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2060*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2061*dc5640d1SHerbert Xue      deprecated="not deprecated">
2062*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
2063*dc5640d1SHerbert Xue      <doc>
2064*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bind(Class)]]>
2065*dc5640d1SHerbert Xue      </doc>
2066*dc5640d1SHerbert Xue    </method>
2067*dc5640d1SHerbert Xue    <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
2068*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2069*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2070*dc5640d1SHerbert Xue      deprecated="not deprecated">
2071*dc5640d1SHerbert Xue      <doc>
2072*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindConstant()]]>
2073*dc5640d1SHerbert Xue      </doc>
2074*dc5640d1SHerbert Xue    </method>
2075*dc5640d1SHerbert Xue    <method name="install"
2076*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2077*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2078*dc5640d1SHerbert Xue      deprecated="not deprecated">
2079*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
2080*dc5640d1SHerbert Xue      <doc>
2081*dc5640d1SHerbert Xue      <![CDATA[@see Binder#install(Module)]]>
2082*dc5640d1SHerbert Xue      </doc>
2083*dc5640d1SHerbert Xue    </method>
2084*dc5640d1SHerbert Xue    <method name="addError"
2085*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2086*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2087*dc5640d1SHerbert Xue      deprecated="not deprecated">
2088*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
2089*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
2090*dc5640d1SHerbert Xue      <doc>
2091*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(String, Object[])]]>
2092*dc5640d1SHerbert Xue      </doc>
2093*dc5640d1SHerbert Xue    </method>
2094*dc5640d1SHerbert Xue    <method name="addError"
2095*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2096*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2097*dc5640d1SHerbert Xue      deprecated="not deprecated">
2098*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
2099*dc5640d1SHerbert Xue      <doc>
2100*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Throwable)]]>
2101*dc5640d1SHerbert Xue      </doc>
2102*dc5640d1SHerbert Xue    </method>
2103*dc5640d1SHerbert Xue    <method name="addError"
2104*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2105*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2106*dc5640d1SHerbert Xue      deprecated="not deprecated">
2107*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
2108*dc5640d1SHerbert Xue      <doc>
2109*dc5640d1SHerbert Xue      <![CDATA[@see Binder#addError(Message)]]>
2110*dc5640d1SHerbert Xue      </doc>
2111*dc5640d1SHerbert Xue    </method>
2112*dc5640d1SHerbert Xue    <method name="requestInjection"
2113*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2114*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2115*dc5640d1SHerbert Xue      deprecated="not deprecated">
2116*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
2117*dc5640d1SHerbert Xue      <doc>
2118*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestInjection(Object)]]>
2119*dc5640d1SHerbert Xue      </doc>
2120*dc5640d1SHerbert Xue    </method>
2121*dc5640d1SHerbert Xue    <method name="requestStaticInjection"
2122*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2123*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2124*dc5640d1SHerbert Xue      deprecated="not deprecated">
2125*dc5640d1SHerbert Xue      <param name="types" type="java.lang.Class[]"/>
2126*dc5640d1SHerbert Xue      <doc>
2127*dc5640d1SHerbert Xue      <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
2128*dc5640d1SHerbert Xue      </doc>
2129*dc5640d1SHerbert Xue    </method>
2130*dc5640d1SHerbert Xue    <method name="bindInterceptor"
2131*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2132*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2133*dc5640d1SHerbert Xue      deprecated="not deprecated">
2134*dc5640d1SHerbert Xue      <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
2135*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
2136*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
2137*dc5640d1SHerbert Xue      <doc>
2138*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
2139*dc5640d1SHerbert Xue      </doc>
2140*dc5640d1SHerbert Xue    </method>
2141*dc5640d1SHerbert Xue    <method name="requireBinding"
2142*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2143*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2144*dc5640d1SHerbert Xue      deprecated="not deprecated">
2145*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
2146*dc5640d1SHerbert Xue      <doc>
2147*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given key.]]>
2148*dc5640d1SHerbert Xue      </doc>
2149*dc5640d1SHerbert Xue    </method>
2150*dc5640d1SHerbert Xue    <method name="requireBinding"
2151*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2152*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2153*dc5640d1SHerbert Xue      deprecated="not deprecated">
2154*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
2155*dc5640d1SHerbert Xue      <doc>
2156*dc5640d1SHerbert Xue      <![CDATA[Instructs Guice to require a binding to the given type.]]>
2157*dc5640d1SHerbert Xue      </doc>
2158*dc5640d1SHerbert Xue    </method>
2159*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2160*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2161*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2162*dc5640d1SHerbert Xue      deprecated="not deprecated">
2163*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2164*dc5640d1SHerbert Xue      <doc>
2165*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Key)]]>
2166*dc5640d1SHerbert Xue      </doc>
2167*dc5640d1SHerbert Xue    </method>
2168*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
2169*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2170*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2171*dc5640d1SHerbert Xue      deprecated="not deprecated">
2172*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2173*dc5640d1SHerbert Xue      <doc>
2174*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getProvider(Class)]]>
2175*dc5640d1SHerbert Xue      </doc>
2176*dc5640d1SHerbert Xue    </method>
2177*dc5640d1SHerbert Xue    <method name="convertToTypes"
2178*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2179*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2180*dc5640d1SHerbert Xue      deprecated="not deprecated">
2181*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2182*dc5640d1SHerbert Xue      <param name="converter" type="com.google.inject.spi.TypeConverter"/>
2183*dc5640d1SHerbert Xue      <doc>
2184*dc5640d1SHerbert Xue      <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
2185*dc5640d1SHerbert Xue      </doc>
2186*dc5640d1SHerbert Xue    </method>
2187*dc5640d1SHerbert Xue    <method name="currentStage" return="com.google.inject.Stage"
2188*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2189*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
2190*dc5640d1SHerbert Xue      deprecated="not deprecated">
2191*dc5640d1SHerbert Xue      <doc>
2192*dc5640d1SHerbert Xue      <![CDATA[@see Binder#currentStage()]]>
2193*dc5640d1SHerbert Xue      </doc>
2194*dc5640d1SHerbert Xue    </method>
2195*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2196*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2197*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2198*dc5640d1SHerbert Xue      deprecated="not deprecated">
2199*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2200*dc5640d1SHerbert Xue      <doc>
2201*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(Class)]]>
2202*dc5640d1SHerbert Xue      </doc>
2203*dc5640d1SHerbert Xue    </method>
2204*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
2205*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2206*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2207*dc5640d1SHerbert Xue      deprecated="not deprecated">
2208*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2209*dc5640d1SHerbert Xue      <doc>
2210*dc5640d1SHerbert Xue      <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
2211*dc5640d1SHerbert Xue      </doc>
2212*dc5640d1SHerbert Xue    </method>
2213*dc5640d1SHerbert Xue    <method name="bindListener"
2214*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2215*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2216*dc5640d1SHerbert Xue      deprecated="not deprecated">
2217*dc5640d1SHerbert Xue      <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
2218*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.TypeListener"/>
2219*dc5640d1SHerbert Xue      <doc>
2220*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
2221*dc5640d1SHerbert Xue      </doc>
2222*dc5640d1SHerbert Xue    </method>
2223*dc5640d1SHerbert Xue    <method name="bindListener"
2224*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2225*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2226*dc5640d1SHerbert Xue      deprecated="not deprecated">
2227*dc5640d1SHerbert Xue      <param name="bindingMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"/>
2228*dc5640d1SHerbert Xue      <param name="listeners" type="com.google.inject.spi.ProvisionListener[]"/>
2229*dc5640d1SHerbert Xue      <doc>
2230*dc5640d1SHerbert Xue      <![CDATA[@see Binder#bindListener(Matcher, ProvisionListener...)
2231*dc5640d1SHerbert Xue @since 4.0]]>
2232*dc5640d1SHerbert Xue      </doc>
2233*dc5640d1SHerbert Xue    </method>
2234*dc5640d1SHerbert Xue    <doc>
2235*dc5640d1SHerbert Xue    <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
2236*dc5640d1SHerbert Xue that are explicitly exposed will be available to other modules and to the users of the injector.
2237*dc5640d1SHerbert Xue This module may expose the bindings it creates and the bindings of the modules it installs.
2238*dc5640d1SHerbert Xue
2239*dc5640d1SHerbert Xue <p>A private module can be nested within a regular module or within another private module using
2240*dc5640d1SHerbert Xue {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
2241*dc5640d1SHerbert Xue type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
2242*dc5640d1SHerbert Xue nest multiple private modules, the result is a tree of environments where the injector's
2243*dc5640d1SHerbert Xue environment is the root.
2244*dc5640d1SHerbert Xue
2245*dc5640d1SHerbert Xue <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
2246*dc5640d1SHerbert Xue com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
2247*dc5640d1SHerbert Xue Exposed} annotation:
2248*dc5640d1SHerbert Xue
2249*dc5640d1SHerbert Xue <pre>
2250*dc5640d1SHerbert Xue public class FooBarBazModule extends PrivateModule {
2251*dc5640d1SHerbert Xue   protected void configure() {
2252*dc5640d1SHerbert Xue     bind(Foo.class).to(RealFoo.class);
2253*dc5640d1SHerbert Xue     expose(Foo.class);
2254*dc5640d1SHerbert Xue
2255*dc5640d1SHerbert Xue     install(new TransactionalBarModule());
2256*dc5640d1SHerbert Xue     expose(Bar.class).annotatedWith(Transactional.class);
2257*dc5640d1SHerbert Xue
2258*dc5640d1SHerbert Xue     bind(SomeImplementationDetail.class);
2259*dc5640d1SHerbert Xue     install(new MoreImplementationDetailsModule());
2260*dc5640d1SHerbert Xue   }
2261*dc5640d1SHerbert Xue
2262*dc5640d1SHerbert Xue   {@literal @}Provides {@literal @}Exposed
2263*dc5640d1SHerbert Xue   public Baz provideBaz() {
2264*dc5640d1SHerbert Xue     return new SuperBaz();
2265*dc5640d1SHerbert Xue   }
2266*dc5640d1SHerbert Xue }
2267*dc5640d1SHerbert Xue </pre>
2268*dc5640d1SHerbert Xue
2269*dc5640d1SHerbert Xue <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
2270*dc5640d1SHerbert Xue injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
2271*dc5640d1SHerbert Xue root environment. Such bindings are shared among all environments in the tree.
2272*dc5640d1SHerbert Xue
2273*dc5640d1SHerbert Xue <p>The scope of a binding is constrained to its environment. A singleton bound in a private
2274*dc5640d1SHerbert Xue module will be unique to its environment. But a binding for the same type in a different private
2275*dc5640d1SHerbert Xue module will yield a different instance.
2276*dc5640d1SHerbert Xue
2277*dc5640d1SHerbert Xue <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
2278*dc5640d1SHerbert Xue access to bindings in the root environment. An explicit binding that injects the {@code Injector}
2279*dc5640d1SHerbert Xue gets access to all bindings in the child environment.
2280*dc5640d1SHerbert Xue
2281*dc5640d1SHerbert Xue <p>To promote a just-in-time binding to an explicit binding, bind it:
2282*dc5640d1SHerbert Xue <pre>
2283*dc5640d1SHerbert Xue   bind(FooImpl.class);
2284*dc5640d1SHerbert Xue </pre>
2285*dc5640d1SHerbert Xue
2286*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2287*dc5640d1SHerbert Xue @since 2.0]]>
2288*dc5640d1SHerbert Xue    </doc>
2289*dc5640d1SHerbert Xue  </class>
2290*dc5640d1SHerbert Xue  <!-- end class com.google.inject.PrivateModule -->
2291*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvidedBy -->
2292*dc5640d1SHerbert Xue  <class name="ProvidedBy"    abstract="true"
2293*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2294*dc5640d1SHerbert Xue    deprecated="not deprecated">
2295*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2296*dc5640d1SHerbert Xue    <doc>
2297*dc5640d1SHerbert Xue    <![CDATA[A pointer to the default provider type for a type.
2298*dc5640d1SHerbert Xue
2299*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2300*dc5640d1SHerbert Xue    </doc>
2301*dc5640d1SHerbert Xue  </class>
2302*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvidedBy -->
2303*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Provider -->
2304*dc5640d1SHerbert Xue  <interface name="Provider"    abstract="true"
2305*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2306*dc5640d1SHerbert Xue    deprecated="not deprecated">
2307*dc5640d1SHerbert Xue    <implements name="javax.inject.Provider&lt;T&gt;"/>
2308*dc5640d1SHerbert Xue    <method name="get" return="T"
2309*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2310*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2311*dc5640d1SHerbert Xue      deprecated="not deprecated">
2312*dc5640d1SHerbert Xue      <doc>
2313*dc5640d1SHerbert Xue      <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
2314*dc5640d1SHerbert Xue
2315*dc5640d1SHerbert Xue @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
2316*dc5640d1SHerbert Xue     in question is not currently active
2317*dc5640d1SHerbert Xue @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
2318*dc5640d1SHerbert Xue     and throwables to describe why provision failed.]]>
2319*dc5640d1SHerbert Xue      </doc>
2320*dc5640d1SHerbert Xue    </method>
2321*dc5640d1SHerbert Xue    <doc>
2322*dc5640d1SHerbert Xue    <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
2323*dc5640d1SHerbert Xue by Guice:
2324*dc5640d1SHerbert Xue
2325*dc5640d1SHerbert Xue <ul>
2326*dc5640d1SHerbert Xue <li>When the default means for obtaining instances (an injectable or parameterless constructor)
2327*dc5640d1SHerbert Xue is insufficient for a particular binding, the module can specify a custom {@code Provider}
2328*dc5640d1SHerbert Xue instead, to control exactly how Guice creates or obtains instances for the binding.
2329*dc5640d1SHerbert Xue
2330*dc5640d1SHerbert Xue <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
2331*dc5640d1SHerbert Xue rather than having a {@code T} injected directly.  This may give you access to multiple
2332*dc5640d1SHerbert Xue instances, instances you wish to safely mutate and discard, instances which are out of scope
2333*dc5640d1SHerbert Xue (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
2334*dc5640d1SHerbert Xue instances that will be initialized lazily.
2335*dc5640d1SHerbert Xue
2336*dc5640d1SHerbert Xue <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
2337*dc5640d1SHerbert Xue when to delegate to the backing provider and when to provide the instance some other way.
2338*dc5640d1SHerbert Xue
2339*dc5640d1SHerbert Xue <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
2340*dc5640d1SHerbert Xue for a given key, via the {@link Injector#getProvider} methods.
2341*dc5640d1SHerbert Xue </ul>
2342*dc5640d1SHerbert Xue
2343*dc5640d1SHerbert Xue @param <T> the type of object this provides
2344*dc5640d1SHerbert Xue
2345*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2346*dc5640d1SHerbert Xue    </doc>
2347*dc5640d1SHerbert Xue  </interface>
2348*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Provider -->
2349*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Provides -->
2350*dc5640d1SHerbert Xue  <class name="Provides"    abstract="true"
2351*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2352*dc5640d1SHerbert Xue    deprecated="not deprecated">
2353*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2354*dc5640d1SHerbert Xue    <doc>
2355*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
2356*dc5640d1SHerbert Xue type is bound to its returned value. Guice will pass dependencies to the method as parameters.
2357*dc5640d1SHerbert Xue
2358*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2359*dc5640d1SHerbert Xue @since 2.0]]>
2360*dc5640d1SHerbert Xue    </doc>
2361*dc5640d1SHerbert Xue  </class>
2362*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Provides -->
2363*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ProvisionException -->
2364*dc5640d1SHerbert Xue  <class name="ProvisionException" extends="java.lang.RuntimeException"
2365*dc5640d1SHerbert Xue    abstract="false"
2366*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2367*dc5640d1SHerbert Xue    deprecated="not deprecated">
2368*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
2369*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2370*dc5640d1SHerbert Xue      deprecated="not deprecated">
2371*dc5640d1SHerbert Xue      <doc>
2372*dc5640d1SHerbert Xue      <![CDATA[Creates a ProvisionException containing {@code messages}.]]>
2373*dc5640d1SHerbert Xue      </doc>
2374*dc5640d1SHerbert Xue    </constructor>
2375*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
2376*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2377*dc5640d1SHerbert Xue      deprecated="not deprecated">
2378*dc5640d1SHerbert Xue    </constructor>
2379*dc5640d1SHerbert Xue    <constructor name="ProvisionException" type="java.lang.String"
2380*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2381*dc5640d1SHerbert Xue      deprecated="not deprecated">
2382*dc5640d1SHerbert Xue    </constructor>
2383*dc5640d1SHerbert Xue    <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
2384*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2385*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2386*dc5640d1SHerbert Xue      deprecated="not deprecated">
2387*dc5640d1SHerbert Xue      <doc>
2388*dc5640d1SHerbert Xue      <![CDATA[Returns messages for the errors that caused this exception.]]>
2389*dc5640d1SHerbert Xue      </doc>
2390*dc5640d1SHerbert Xue    </method>
2391*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
2392*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2393*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2394*dc5640d1SHerbert Xue      deprecated="not deprecated">
2395*dc5640d1SHerbert Xue    </method>
2396*dc5640d1SHerbert Xue    <doc>
2397*dc5640d1SHerbert Xue    <![CDATA[Indicates that there was a runtime failure while providing an instance.
2398*dc5640d1SHerbert Xue
2399*dc5640d1SHerbert Xue @author [email protected] (Kevin Bourrillion)
2400*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
2401*dc5640d1SHerbert Xue @since 2.0]]>
2402*dc5640d1SHerbert Xue    </doc>
2403*dc5640d1SHerbert Xue  </class>
2404*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ProvisionException -->
2405*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.Scope -->
2406*dc5640d1SHerbert Xue  <interface name="Scope"    abstract="true"
2407*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2408*dc5640d1SHerbert Xue    deprecated="not deprecated">
2409*dc5640d1SHerbert Xue    <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
2410*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2411*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2412*dc5640d1SHerbert Xue      deprecated="not deprecated">
2413*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
2414*dc5640d1SHerbert Xue      <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
2415*dc5640d1SHerbert Xue      <doc>
2416*dc5640d1SHerbert Xue      <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
2417*dc5640d1SHerbert Xue If an object does not exist in this scope, the provider can use the given
2418*dc5640d1SHerbert Xue unscoped provider to retrieve one.
2419*dc5640d1SHerbert Xue
2420*dc5640d1SHerbert Xue <p>Scope implementations are strongly encouraged to override
2421*dc5640d1SHerbert Xue {@link Object#toString} in the returned provider and include the backing
2422*dc5640d1SHerbert Xue provider's {@code toString()} output.
2423*dc5640d1SHerbert Xue
2424*dc5640d1SHerbert Xue @param key binding key
2425*dc5640d1SHerbert Xue @param unscoped locates an instance when one doesn't already exist in this
2426*dc5640d1SHerbert Xue  scope.
2427*dc5640d1SHerbert Xue @return a new provider which only delegates to the given unscoped provider
2428*dc5640d1SHerbert Xue  when an instance of the requested object doesn't already exist in this
2429*dc5640d1SHerbert Xue  scope]]>
2430*dc5640d1SHerbert Xue      </doc>
2431*dc5640d1SHerbert Xue    </method>
2432*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2433*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2434*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2435*dc5640d1SHerbert Xue      deprecated="not deprecated">
2436*dc5640d1SHerbert Xue      <doc>
2437*dc5640d1SHerbert Xue      <![CDATA[A short but useful description of this scope.  For comparison, the standard
2438*dc5640d1SHerbert Xue scopes that ship with guice use the descriptions
2439*dc5640d1SHerbert Xue {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
2440*dc5640d1SHerbert Xue {@code "ServletScopes.REQUEST"}.]]>
2441*dc5640d1SHerbert Xue      </doc>
2442*dc5640d1SHerbert Xue    </method>
2443*dc5640d1SHerbert Xue    <doc>
2444*dc5640d1SHerbert Xue    <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
2445*dc5640d1SHerbert Xue By default, an instance created by the {@link Injector} has <i>no scope</i>,
2446*dc5640d1SHerbert Xue meaning it has no state from the framework's perspective -- the
2447*dc5640d1SHerbert Xue {@code Injector} creates it, injects it once into the class that required it,
2448*dc5640d1SHerbert Xue and then immediately forgets it. Associating a scope with a particular
2449*dc5640d1SHerbert Xue binding allows the created instance to be "remembered" and possibly used
2450*dc5640d1SHerbert Xue again for other injections.
2451*dc5640d1SHerbert Xue
2452*dc5640d1SHerbert Xue <p>An example of a scope is {@link Scopes#SINGLETON}.
2453*dc5640d1SHerbert Xue
2454*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2455*dc5640d1SHerbert Xue    </doc>
2456*dc5640d1SHerbert Xue  </interface>
2457*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.Scope -->
2458*dc5640d1SHerbert Xue  <!-- start class com.google.inject.ScopeAnnotation -->
2459*dc5640d1SHerbert Xue  <class name="ScopeAnnotation"    abstract="true"
2460*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2461*dc5640d1SHerbert Xue    deprecated="not deprecated">
2462*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2463*dc5640d1SHerbert Xue    <doc>
2464*dc5640d1SHerbert Xue    <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
2465*dc5640d1SHerbert Xue may apply to a single implementation class. You must also annotate scope
2466*dc5640d1SHerbert Xue annotations with {@code @Retention(RUNTIME)}. For example:
2467*dc5640d1SHerbert Xue
2468*dc5640d1SHerbert Xue <pre>
2469*dc5640d1SHerbert Xue   {@code @}Retention(RUNTIME)
2470*dc5640d1SHerbert Xue   {@code @}Target(TYPE, METHOD)
2471*dc5640d1SHerbert Xue   {@code @}ScopeAnnotation
2472*dc5640d1SHerbert Xue   public {@code @}interface SessionScoped {}
2473*dc5640d1SHerbert Xue </pre>
2474*dc5640d1SHerbert Xue
2475*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2476*dc5640d1SHerbert Xue    </doc>
2477*dc5640d1SHerbert Xue  </class>
2478*dc5640d1SHerbert Xue  <!-- end class com.google.inject.ScopeAnnotation -->
2479*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Scopes -->
2480*dc5640d1SHerbert Xue  <class name="Scopes" extends="java.lang.Object"
2481*dc5640d1SHerbert Xue    abstract="false"
2482*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2483*dc5640d1SHerbert Xue    deprecated="not deprecated">
2484*dc5640d1SHerbert Xue    <method name="isSingleton" return="boolean"
2485*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2486*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2487*dc5640d1SHerbert Xue      deprecated="not deprecated">
2488*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2489*dc5640d1SHerbert Xue      <doc>
2490*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} is singleton-scoped. If the binding is a {@link
2491*dc5640d1SHerbert Xue com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2492*dc5640d1SHerbert Xue was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2493*dc5640d1SHerbert Xue also true if the target binding is singleton-scoped.
2494*dc5640d1SHerbert Xue
2495*dc5640d1SHerbert Xue @since 3.0]]>
2496*dc5640d1SHerbert Xue      </doc>
2497*dc5640d1SHerbert Xue    </method>
2498*dc5640d1SHerbert Xue    <method name="isScoped" return="boolean"
2499*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2500*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2501*dc5640d1SHerbert Xue      deprecated="not deprecated">
2502*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
2503*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
2504*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
2505*dc5640d1SHerbert Xue      <doc>
2506*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} has the given scope. If the binding is a {@link
2507*dc5640d1SHerbert Xue com.google.inject.spi.LinkedKeyBinding linked key binding} and belongs to an injector (ie. it
2508*dc5640d1SHerbert Xue was retrieved via {@link Injector#getBinding Injector.getBinding()}), then this method will
2509*dc5640d1SHerbert Xue also true if the target binding has the given scope.
2510*dc5640d1SHerbert Xue
2511*dc5640d1SHerbert Xue @param binding binding to check
2512*dc5640d1SHerbert Xue @param scope scope implementation instance
2513*dc5640d1SHerbert Xue @param scopeAnnotation scope annotation class
2514*dc5640d1SHerbert Xue @since 4.0]]>
2515*dc5640d1SHerbert Xue      </doc>
2516*dc5640d1SHerbert Xue    </method>
2517*dc5640d1SHerbert Xue    <method name="isCircularProxy" return="boolean"
2518*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2519*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2520*dc5640d1SHerbert Xue      deprecated="not deprecated">
2521*dc5640d1SHerbert Xue      <param name="object" type="java.lang.Object"/>
2522*dc5640d1SHerbert Xue      <doc>
2523*dc5640d1SHerbert Xue      <![CDATA[Returns true if the object is a proxy for a circular dependency,
2524*dc5640d1SHerbert Xue constructed by Guice because it encountered a circular dependency. Scope
2525*dc5640d1SHerbert Xue implementations should be careful to <b>not cache circular proxies</b>,
2526*dc5640d1SHerbert Xue because the proxies are not intended for general purpose use. (They are
2527*dc5640d1SHerbert Xue designed just to fulfill the immediate injection, not all injections.
2528*dc5640d1SHerbert Xue Caching them can lead to IllegalArgumentExceptions or ClassCastExceptions.)
2529*dc5640d1SHerbert Xue
2530*dc5640d1SHerbert Xue @since 4.0]]>
2531*dc5640d1SHerbert Xue      </doc>
2532*dc5640d1SHerbert Xue    </method>
2533*dc5640d1SHerbert Xue    <field name="SINGLETON" type="com.google.inject.Scope"
2534*dc5640d1SHerbert Xue      transient="false" volatile="false"
2535*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2536*dc5640d1SHerbert Xue      deprecated="not deprecated">
2537*dc5640d1SHerbert Xue      <doc>
2538*dc5640d1SHerbert Xue      <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
2539*dc5640d1SHerbert Xue      </doc>
2540*dc5640d1SHerbert Xue    </field>
2541*dc5640d1SHerbert Xue    <field name="NO_SCOPE" type="com.google.inject.Scope"
2542*dc5640d1SHerbert Xue      transient="false" volatile="false"
2543*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
2544*dc5640d1SHerbert Xue      deprecated="not deprecated">
2545*dc5640d1SHerbert Xue      <doc>
2546*dc5640d1SHerbert Xue      <![CDATA[No scope; the same as not applying any scope at all.  Each time the
2547*dc5640d1SHerbert Xue Injector obtains an instance of an object with "no scope", it injects this
2548*dc5640d1SHerbert Xue instance then immediately forgets it.  When the next request for the same
2549*dc5640d1SHerbert Xue binding arrives it will need to obtain the instance over again.
2550*dc5640d1SHerbert Xue
2551*dc5640d1SHerbert Xue <p>This exists only in case a class has been annotated with a scope
2552*dc5640d1SHerbert Xue annotation such as {@link Singleton @Singleton}, and you need to override
2553*dc5640d1SHerbert Xue this to "no scope" in your binding.
2554*dc5640d1SHerbert Xue
2555*dc5640d1SHerbert Xue @since 2.0]]>
2556*dc5640d1SHerbert Xue      </doc>
2557*dc5640d1SHerbert Xue    </field>
2558*dc5640d1SHerbert Xue    <doc>
2559*dc5640d1SHerbert Xue    <![CDATA[Built-in scope implementations.
2560*dc5640d1SHerbert Xue
2561*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2562*dc5640d1SHerbert Xue    </doc>
2563*dc5640d1SHerbert Xue  </class>
2564*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Scopes -->
2565*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Singleton -->
2566*dc5640d1SHerbert Xue  <class name="Singleton"    abstract="true"
2567*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2568*dc5640d1SHerbert Xue    deprecated="not deprecated">
2569*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2570*dc5640d1SHerbert Xue    <doc>
2571*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want only one instance
2572*dc5640d1SHerbert Xue (per {@link Injector}) to be reused for all injections for that binding.
2573*dc5640d1SHerbert Xue
2574*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2575*dc5640d1SHerbert Xue    </doc>
2576*dc5640d1SHerbert Xue  </class>
2577*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Singleton -->
2578*dc5640d1SHerbert Xue  <!-- start class com.google.inject.Stage -->
2579*dc5640d1SHerbert Xue  <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
2580*dc5640d1SHerbert Xue    abstract="false"
2581*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2582*dc5640d1SHerbert Xue    deprecated="not deprecated">
2583*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.Stage[]"
2584*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2585*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2586*dc5640d1SHerbert Xue      deprecated="not deprecated">
2587*dc5640d1SHerbert Xue    </method>
2588*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.Stage"
2589*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2590*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2591*dc5640d1SHerbert Xue      deprecated="not deprecated">
2592*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
2593*dc5640d1SHerbert Xue    </method>
2594*dc5640d1SHerbert Xue    <doc>
2595*dc5640d1SHerbert Xue    <![CDATA[The stage we're running in.
2596*dc5640d1SHerbert Xue
2597*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
2598*dc5640d1SHerbert Xue    </doc>
2599*dc5640d1SHerbert Xue  </class>
2600*dc5640d1SHerbert Xue  <!-- end class com.google.inject.Stage -->
2601*dc5640d1SHerbert Xue  <!-- start class com.google.inject.TypeLiteral -->
2602*dc5640d1SHerbert Xue  <class name="TypeLiteral" extends="java.lang.Object"
2603*dc5640d1SHerbert Xue    abstract="false"
2604*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2605*dc5640d1SHerbert Xue    deprecated="not deprecated">
2606*dc5640d1SHerbert Xue    <constructor name="TypeLiteral"
2607*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
2608*dc5640d1SHerbert Xue      deprecated="not deprecated">
2609*dc5640d1SHerbert Xue      <doc>
2610*dc5640d1SHerbert Xue      <![CDATA[Constructs a new type literal. Derives represented class from type
2611*dc5640d1SHerbert Xue parameter.
2612*dc5640d1SHerbert Xue
2613*dc5640d1SHerbert Xue <p>Clients create an empty anonymous subclass. Doing so embeds the type
2614*dc5640d1SHerbert Xue parameter in the anonymous class's type hierarchy so we can reconstitute it
2615*dc5640d1SHerbert Xue at runtime despite erasure.]]>
2616*dc5640d1SHerbert Xue      </doc>
2617*dc5640d1SHerbert Xue    </constructor>
2618*dc5640d1SHerbert Xue    <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
2619*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2620*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2621*dc5640d1SHerbert Xue      deprecated="not deprecated">
2622*dc5640d1SHerbert Xue      <doc>
2623*dc5640d1SHerbert Xue      <![CDATA[Returns the raw (non-generic) type for this type.
2624*dc5640d1SHerbert Xue
2625*dc5640d1SHerbert Xue @since 2.0]]>
2626*dc5640d1SHerbert Xue      </doc>
2627*dc5640d1SHerbert Xue    </method>
2628*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.reflect.Type"
2629*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2630*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2631*dc5640d1SHerbert Xue      deprecated="not deprecated">
2632*dc5640d1SHerbert Xue      <doc>
2633*dc5640d1SHerbert Xue      <![CDATA[Gets underlying {@code Type} instance.]]>
2634*dc5640d1SHerbert Xue      </doc>
2635*dc5640d1SHerbert Xue    </method>
2636*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
2637*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2638*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2639*dc5640d1SHerbert Xue      deprecated="not deprecated">
2640*dc5640d1SHerbert Xue    </method>
2641*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
2642*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2643*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2644*dc5640d1SHerbert Xue      deprecated="not deprecated">
2645*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
2646*dc5640d1SHerbert Xue    </method>
2647*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
2648*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2649*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
2650*dc5640d1SHerbert Xue      deprecated="not deprecated">
2651*dc5640d1SHerbert Xue    </method>
2652*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
2653*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2654*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2655*dc5640d1SHerbert Xue      deprecated="not deprecated">
2656*dc5640d1SHerbert Xue      <param name="type" type="java.lang.reflect.Type"/>
2657*dc5640d1SHerbert Xue      <doc>
2658*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Type} instance.]]>
2659*dc5640d1SHerbert Xue      </doc>
2660*dc5640d1SHerbert Xue    </method>
2661*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
2662*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2663*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
2664*dc5640d1SHerbert Xue      deprecated="not deprecated">
2665*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
2666*dc5640d1SHerbert Xue      <doc>
2667*dc5640d1SHerbert Xue      <![CDATA[Gets type literal for the given {@code Class} instance.]]>
2668*dc5640d1SHerbert Xue      </doc>
2669*dc5640d1SHerbert Xue    </method>
2670*dc5640d1SHerbert Xue    <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
2671*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2672*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2673*dc5640d1SHerbert Xue      deprecated="not deprecated">
2674*dc5640d1SHerbert Xue      <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
2675*dc5640d1SHerbert Xue      <doc>
2676*dc5640d1SHerbert Xue      <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
2677*dc5640d1SHerbert Xue ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
2678*dc5640d1SHerbert Xue Iterable.class}.
2679*dc5640d1SHerbert Xue
2680*dc5640d1SHerbert Xue @param supertype a superclass of, or interface implemented by, this.
2681*dc5640d1SHerbert Xue @since 2.0]]>
2682*dc5640d1SHerbert Xue      </doc>
2683*dc5640d1SHerbert Xue    </method>
2684*dc5640d1SHerbert Xue    <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2685*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2686*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2687*dc5640d1SHerbert Xue      deprecated="not deprecated">
2688*dc5640d1SHerbert Xue      <param name="field" type="java.lang.reflect.Field"/>
2689*dc5640d1SHerbert Xue      <doc>
2690*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic type of {@code field}.
2691*dc5640d1SHerbert Xue
2692*dc5640d1SHerbert Xue @param field a field defined by this or any superclass.
2693*dc5640d1SHerbert Xue @since 2.0]]>
2694*dc5640d1SHerbert Xue      </doc>
2695*dc5640d1SHerbert Xue    </method>
2696*dc5640d1SHerbert Xue    <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2697*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2698*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2699*dc5640d1SHerbert Xue      deprecated="not deprecated">
2700*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2701*dc5640d1SHerbert Xue      <doc>
2702*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
2703*dc5640d1SHerbert Xue
2704*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2705*dc5640d1SHerbert Xue @since 2.0]]>
2706*dc5640d1SHerbert Xue      </doc>
2707*dc5640d1SHerbert Xue    </method>
2708*dc5640d1SHerbert Xue    <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
2709*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2710*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2711*dc5640d1SHerbert Xue      deprecated="not deprecated">
2712*dc5640d1SHerbert Xue      <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
2713*dc5640d1SHerbert Xue      <doc>
2714*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
2715*dc5640d1SHerbert Xue
2716*dc5640d1SHerbert Xue @param methodOrConstructor a method or constructor defined by this or any supertype.
2717*dc5640d1SHerbert Xue @since 2.0]]>
2718*dc5640d1SHerbert Xue      </doc>
2719*dc5640d1SHerbert Xue    </method>
2720*dc5640d1SHerbert Xue    <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2721*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2722*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2723*dc5640d1SHerbert Xue      deprecated="not deprecated">
2724*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
2725*dc5640d1SHerbert Xue      <doc>
2726*dc5640d1SHerbert Xue      <![CDATA[Returns the resolved generic return type of {@code method}.
2727*dc5640d1SHerbert Xue
2728*dc5640d1SHerbert Xue @param method a method defined by this or any supertype.
2729*dc5640d1SHerbert Xue @since 2.0]]>
2730*dc5640d1SHerbert Xue      </doc>
2731*dc5640d1SHerbert Xue    </method>
2732*dc5640d1SHerbert Xue    <doc>
2733*dc5640d1SHerbert Xue    <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
2734*dc5640d1SHerbert Xue represent generic types, so this class does. Forces clients to create a
2735*dc5640d1SHerbert Xue subclass of this class which enables retrieval the type information even at
2736*dc5640d1SHerbert Xue runtime.
2737*dc5640d1SHerbert Xue
2738*dc5640d1SHerbert Xue <p>For example, to create a type literal for {@code List<String>}, you can
2739*dc5640d1SHerbert Xue create an empty anonymous inner class:
2740*dc5640d1SHerbert Xue
2741*dc5640d1SHerbert Xue <p>
2742*dc5640d1SHerbert Xue {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
2743*dc5640d1SHerbert Xue
2744*dc5640d1SHerbert Xue <p>Along with modeling generic types, this class can resolve type parameters.
2745*dc5640d1SHerbert Xue For example, to figure out what type {@code keySet()} returns on a {@code
2746*dc5640d1SHerbert Xue Map<Integer, String>}, use this code:<pre>   {@code
2747*dc5640d1SHerbert Xue
2748*dc5640d1SHerbert Xue   TypeLiteral<Map<Integer, String>> mapType
2749*dc5640d1SHerbert Xue       = new TypeLiteral<Map<Integer, String>>() {};
2750*dc5640d1SHerbert Xue   TypeLiteral<?> keySetType
2751*dc5640d1SHerbert Xue       = mapType.getReturnType(Map.class.getMethod("keySet"));
2752*dc5640d1SHerbert Xue   System.out.println(keySetType); // prints "Set<Integer>"}</pre>
2753*dc5640d1SHerbert Xue
2754*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
2755*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2756*dc5640d1SHerbert Xue    </doc>
2757*dc5640d1SHerbert Xue  </class>
2758*dc5640d1SHerbert Xue  <!-- end class com.google.inject.TypeLiteral -->
2759*dc5640d1SHerbert Xue</package>
2760*dc5640d1SHerbert Xue<package name="com.google.inject.assistedinject">
2761*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.Assisted -->
2762*dc5640d1SHerbert Xue  <class name="Assisted"    abstract="true"
2763*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2764*dc5640d1SHerbert Xue    deprecated="not deprecated">
2765*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2766*dc5640d1SHerbert Xue    <doc>
2767*dc5640d1SHerbert Xue    <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
2768*dc5640d1SHerbert Xue
2769*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2770*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2771*dc5640d1SHerbert Xue    </doc>
2772*dc5640d1SHerbert Xue  </class>
2773*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.Assisted -->
2774*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.AssistedInject -->
2775*dc5640d1SHerbert Xue  <class name="AssistedInject"    abstract="true"
2776*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2777*dc5640d1SHerbert Xue    deprecated="not deprecated">
2778*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
2779*dc5640d1SHerbert Xue    <doc>
2780*dc5640d1SHerbert Xue    <![CDATA[<p>
2781*dc5640d1SHerbert Xue When used in tandem with {@link FactoryModuleBuilder}, constructors annotated with
2782*dc5640d1SHerbert Xue {@code @AssistedInject} indicate that multiple constructors can be injected, each with different
2783*dc5640d1SHerbert Xue parameters. AssistedInject annotations should not be mixed with {@literal @}{@link Inject}
2784*dc5640d1SHerbert Xue annotations. The assisted parameters must exactly match one corresponding factory method within
2785*dc5640d1SHerbert Xue the factory interface, but the parameters do not need to be in the same order. Constructors
2786*dc5640d1SHerbert Xue annotated with AssistedInject <b>are</b> created by Guice and receive all the benefits
2787*dc5640d1SHerbert Xue (such as AOP).
2788*dc5640d1SHerbert Xue
2789*dc5640d1SHerbert Xue <p>
2790*dc5640d1SHerbert Xue <strong>Obsolete Usage:</strong> When used in tandem with {@link FactoryProvider}, constructors
2791*dc5640d1SHerbert Xue annotated with {@code @AssistedInject} trigger a "backwards compatibility mode". The assisted
2792*dc5640d1SHerbert Xue parameters must exactly match one corresponding factory method within the factory interface and
2793*dc5640d1SHerbert Xue all must be in the same order as listed in the factory. In this backwards compatable mode,
2794*dc5640d1SHerbert Xue constructors annotated with AssistedInject <b>are not</b> created by Guice and thus receive
2795*dc5640d1SHerbert Xue none of the benefits.
2796*dc5640d1SHerbert Xue
2797*dc5640d1SHerbert Xue <p>
2798*dc5640d1SHerbert Xue Constructor parameters must be either supplied by the factory interface and marked with
2799*dc5640d1SHerbert Xue <code>@Assisted</code>, or they must be injectable.
2800*dc5640d1SHerbert Xue
2801*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
2802*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
2803*dc5640d1SHerbert Xue    </doc>
2804*dc5640d1SHerbert Xue  </class>
2805*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.AssistedInject -->
2806*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectBinding -->
2807*dc5640d1SHerbert Xue  <interface name="AssistedInjectBinding"    abstract="true"
2808*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2809*dc5640d1SHerbert Xue    deprecated="not deprecated">
2810*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
2811*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2812*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2813*dc5640d1SHerbert Xue      deprecated="not deprecated">
2814*dc5640d1SHerbert Xue      <doc>
2815*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the factory binding.]]>
2816*dc5640d1SHerbert Xue      </doc>
2817*dc5640d1SHerbert Xue    </method>
2818*dc5640d1SHerbert Xue    <method name="getAssistedMethods" return="java.util.Collection&lt;com.google.inject.assistedinject.AssistedMethod&gt;"
2819*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2820*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2821*dc5640d1SHerbert Xue      deprecated="not deprecated">
2822*dc5640d1SHerbert Xue      <doc>
2823*dc5640d1SHerbert Xue      <![CDATA[Returns an {@link AssistedMethod} for each method in the factory.]]>
2824*dc5640d1SHerbert Xue      </doc>
2825*dc5640d1SHerbert Xue    </method>
2826*dc5640d1SHerbert Xue    <doc>
2827*dc5640d1SHerbert Xue    <![CDATA[A binding for a factory created by FactoryModuleBuilder.
2828*dc5640d1SHerbert Xue
2829*dc5640d1SHerbert Xue @param <T> The fully qualified type of the factory.
2830*dc5640d1SHerbert Xue
2831*dc5640d1SHerbert Xue @since 3.0
2832*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2833*dc5640d1SHerbert Xue    </doc>
2834*dc5640d1SHerbert Xue  </interface>
2835*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectBinding -->
2836*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2837*dc5640d1SHerbert Xue  <interface name="AssistedInjectTargetVisitor"    abstract="true"
2838*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2839*dc5640d1SHerbert Xue    deprecated="not deprecated">
2840*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
2841*dc5640d1SHerbert Xue    <method name="visit" return="V"
2842*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2843*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2844*dc5640d1SHerbert Xue      deprecated="not deprecated">
2845*dc5640d1SHerbert Xue      <param name="assistedInjectBinding" type="com.google.inject.assistedinject.AssistedInjectBinding&lt;? extends T&gt;"/>
2846*dc5640d1SHerbert Xue      <doc>
2847*dc5640d1SHerbert Xue      <![CDATA[Visits an {@link AssistedInjectBinding} created through {@link FactoryModuleBuilder}.]]>
2848*dc5640d1SHerbert Xue      </doc>
2849*dc5640d1SHerbert Xue    </method>
2850*dc5640d1SHerbert Xue    <doc>
2851*dc5640d1SHerbert Xue    <![CDATA[A visitor for the AssistedInject extension.
2852*dc5640d1SHerbert Xue <p>
2853*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
2854*dc5640d1SHerbert Xue {@link FactoryModuleBuilder} will be visited through this interface.
2855*dc5640d1SHerbert Xue
2856*dc5640d1SHerbert Xue @since 3.0
2857*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2858*dc5640d1SHerbert Xue    </doc>
2859*dc5640d1SHerbert Xue  </interface>
2860*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedInjectTargetVisitor -->
2861*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.assistedinject.AssistedMethod -->
2862*dc5640d1SHerbert Xue  <interface name="AssistedMethod"    abstract="true"
2863*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
2864*dc5640d1SHerbert Xue    deprecated="not deprecated">
2865*dc5640d1SHerbert Xue    <method name="getFactoryMethod" return="java.lang.reflect.Method"
2866*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2867*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2868*dc5640d1SHerbert Xue      deprecated="not deprecated">
2869*dc5640d1SHerbert Xue      <doc>
2870*dc5640d1SHerbert Xue      <![CDATA[Returns the factory method that is being assisted.]]>
2871*dc5640d1SHerbert Xue      </doc>
2872*dc5640d1SHerbert Xue    </method>
2873*dc5640d1SHerbert Xue    <method name="getImplementationType" return="com.google.inject.TypeLiteral&lt;?&gt;"
2874*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2875*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2876*dc5640d1SHerbert Xue      deprecated="not deprecated">
2877*dc5640d1SHerbert Xue      <doc>
2878*dc5640d1SHerbert Xue      <![CDATA[Returns the implementation type that will be created when the method is
2879*dc5640d1SHerbert Xue used.]]>
2880*dc5640d1SHerbert Xue      </doc>
2881*dc5640d1SHerbert Xue    </method>
2882*dc5640d1SHerbert Xue    <method name="getImplementationConstructor" return="java.lang.reflect.Constructor&lt;?&gt;"
2883*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2884*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2885*dc5640d1SHerbert Xue      deprecated="not deprecated">
2886*dc5640d1SHerbert Xue      <doc>
2887*dc5640d1SHerbert Xue      <![CDATA[Returns the constructor that will be used to construct instances of the
2888*dc5640d1SHerbert Xue implementation.]]>
2889*dc5640d1SHerbert Xue      </doc>
2890*dc5640d1SHerbert Xue    </method>
2891*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
2892*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
2893*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2894*dc5640d1SHerbert Xue      deprecated="not deprecated">
2895*dc5640d1SHerbert Xue      <doc>
2896*dc5640d1SHerbert Xue      <![CDATA[Returns all non-assisted dependencies required to construct and inject
2897*dc5640d1SHerbert Xue the implementation.]]>
2898*dc5640d1SHerbert Xue      </doc>
2899*dc5640d1SHerbert Xue    </method>
2900*dc5640d1SHerbert Xue    <doc>
2901*dc5640d1SHerbert Xue    <![CDATA[Details about how a method in an assisted inject factory will be assisted.
2902*dc5640d1SHerbert Xue
2903*dc5640d1SHerbert Xue @since 3.0
2904*dc5640d1SHerbert Xue @author [email protected] (Ramakrishna Rajanna)]]>
2905*dc5640d1SHerbert Xue    </doc>
2906*dc5640d1SHerbert Xue  </interface>
2907*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.assistedinject.AssistedMethod -->
2908*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryModuleBuilder -->
2909*dc5640d1SHerbert Xue  <class name="FactoryModuleBuilder" extends="java.lang.Object"
2910*dc5640d1SHerbert Xue    abstract="false"
2911*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
2912*dc5640d1SHerbert Xue    deprecated="not deprecated">
2913*dc5640d1SHerbert Xue    <constructor name="FactoryModuleBuilder"
2914*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2915*dc5640d1SHerbert Xue      deprecated="not deprecated">
2916*dc5640d1SHerbert Xue    </constructor>
2917*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2918*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2919*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2920*dc5640d1SHerbert Xue      deprecated="not deprecated">
2921*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2922*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2923*dc5640d1SHerbert Xue      <doc>
2924*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2925*dc5640d1SHerbert Xue      </doc>
2926*dc5640d1SHerbert Xue    </method>
2927*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2928*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2929*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2930*dc5640d1SHerbert Xue      deprecated="not deprecated">
2931*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2932*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2933*dc5640d1SHerbert Xue      <doc>
2934*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2935*dc5640d1SHerbert Xue      </doc>
2936*dc5640d1SHerbert Xue    </method>
2937*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2938*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2939*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2940*dc5640d1SHerbert Xue      deprecated="not deprecated">
2941*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2942*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2943*dc5640d1SHerbert Xue      <doc>
2944*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2945*dc5640d1SHerbert Xue      </doc>
2946*dc5640d1SHerbert Xue    </method>
2947*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2948*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2949*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2950*dc5640d1SHerbert Xue      deprecated="not deprecated">
2951*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2952*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2953*dc5640d1SHerbert Xue      <doc>
2954*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2955*dc5640d1SHerbert Xue      </doc>
2956*dc5640d1SHerbert Xue    </method>
2957*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2958*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2959*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2960*dc5640d1SHerbert Xue      deprecated="not deprecated">
2961*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2962*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2963*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2964*dc5640d1SHerbert Xue      <doc>
2965*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2966*dc5640d1SHerbert Xue      </doc>
2967*dc5640d1SHerbert Xue    </method>
2968*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2969*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2971*dc5640d1SHerbert Xue      deprecated="not deprecated">
2972*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
2973*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2974*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2975*dc5640d1SHerbert Xue      <doc>
2976*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2977*dc5640d1SHerbert Xue      </doc>
2978*dc5640d1SHerbert Xue    </method>
2979*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2980*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2981*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2982*dc5640d1SHerbert Xue      deprecated="not deprecated">
2983*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2984*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2985*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
2986*dc5640d1SHerbert Xue      <doc>
2987*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2988*dc5640d1SHerbert Xue      </doc>
2989*dc5640d1SHerbert Xue    </method>
2990*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
2991*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
2992*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
2993*dc5640d1SHerbert Xue      deprecated="not deprecated">
2994*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
2995*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
2996*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
2997*dc5640d1SHerbert Xue      <doc>
2998*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
2999*dc5640d1SHerbert Xue      </doc>
3000*dc5640d1SHerbert Xue    </method>
3001*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3002*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3003*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3004*dc5640d1SHerbert Xue      deprecated="not deprecated">
3005*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3006*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3007*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3008*dc5640d1SHerbert Xue      <doc>
3009*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3010*dc5640d1SHerbert Xue      </doc>
3011*dc5640d1SHerbert Xue    </method>
3012*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3013*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3014*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3015*dc5640d1SHerbert Xue      deprecated="not deprecated">
3016*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Class&lt;T&gt;"/>
3017*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3018*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3019*dc5640d1SHerbert Xue      <doc>
3020*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3021*dc5640d1SHerbert Xue      </doc>
3022*dc5640d1SHerbert Xue    </method>
3023*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3024*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3025*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3026*dc5640d1SHerbert Xue      deprecated="not deprecated">
3027*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3028*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3029*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3030*dc5640d1SHerbert Xue      <doc>
3031*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3032*dc5640d1SHerbert Xue      </doc>
3033*dc5640d1SHerbert Xue    </method>
3034*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3035*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3036*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3037*dc5640d1SHerbert Xue      deprecated="not deprecated">
3038*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
3039*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3040*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3041*dc5640d1SHerbert Xue      <doc>
3042*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3043*dc5640d1SHerbert Xue      </doc>
3044*dc5640d1SHerbert Xue    </method>
3045*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3046*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3047*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3048*dc5640d1SHerbert Xue      deprecated="not deprecated">
3049*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3050*dc5640d1SHerbert Xue      <param name="target" type="java.lang.Class&lt;? extends T&gt;"/>
3051*dc5640d1SHerbert Xue      <doc>
3052*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3053*dc5640d1SHerbert Xue      </doc>
3054*dc5640d1SHerbert Xue    </method>
3055*dc5640d1SHerbert Xue    <method name="implement" return="com.google.inject.assistedinject.FactoryModuleBuilder"
3056*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3057*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3058*dc5640d1SHerbert Xue      deprecated="not deprecated">
3059*dc5640d1SHerbert Xue      <param name="source" type="com.google.inject.Key&lt;T&gt;"/>
3060*dc5640d1SHerbert Xue      <param name="target" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3061*dc5640d1SHerbert Xue      <doc>
3062*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3063*dc5640d1SHerbert Xue      </doc>
3064*dc5640d1SHerbert Xue    </method>
3065*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3066*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3067*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3068*dc5640d1SHerbert Xue      deprecated="not deprecated">
3069*dc5640d1SHerbert Xue      <param name="factoryInterface" type="java.lang.Class&lt;F&gt;"/>
3070*dc5640d1SHerbert Xue      <doc>
3071*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3072*dc5640d1SHerbert Xue      </doc>
3073*dc5640d1SHerbert Xue    </method>
3074*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3075*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3076*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3077*dc5640d1SHerbert Xue      deprecated="not deprecated">
3078*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3079*dc5640d1SHerbert Xue      <doc>
3080*dc5640d1SHerbert Xue      <![CDATA[See the factory configuration examples at {@link FactoryModuleBuilder}.]]>
3081*dc5640d1SHerbert Xue      </doc>
3082*dc5640d1SHerbert Xue    </method>
3083*dc5640d1SHerbert Xue    <method name="build" return="com.google.inject.Module"
3084*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3085*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3086*dc5640d1SHerbert Xue      deprecated="not deprecated">
3087*dc5640d1SHerbert Xue      <param name="factoryInterface" type="com.google.inject.Key&lt;F&gt;"/>
3088*dc5640d1SHerbert Xue    </method>
3089*dc5640d1SHerbert Xue    <doc>
3090*dc5640d1SHerbert Xue    <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
3091*dc5640d1SHerbert Xue construct objects.
3092*dc5640d1SHerbert Xue
3093*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
3094*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
3095*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
3096*dc5640d1SHerbert Xue
3097*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3098*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
3099*dc5640d1SHerbert Xue }</pre>
3100*dc5640d1SHerbert Xue
3101*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3102*dc5640d1SHerbert Xue or <i>newPayment</i>.
3103*dc5640d1SHerbert Xue
3104*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
3105*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link com.google.inject.Inject
3106*dc5640d1SHerbert Xue Inject}-annotated constructor. In addition to injector-supplied parameters, the constructor
3107*dc5640d1SHerbert Xue should have parameters that match each of the factory method's parameters. Each factory-supplied
3108*dc5640d1SHerbert Xue parameter requires an {@literal @}{@link Assisted} annotation. This serves to document that the
3109*dc5640d1SHerbert Xue parameter is not bound by your application's modules.
3110*dc5640d1SHerbert Xue
3111*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3112*dc5640d1SHerbert Xue   {@literal @}Inject
3113*dc5640d1SHerbert Xue   public RealPayment(
3114*dc5640d1SHerbert Xue      CreditService creditService,
3115*dc5640d1SHerbert Xue      AuthService authService,
3116*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
3117*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
3118*dc5640d1SHerbert Xue     ...
3119*dc5640d1SHerbert Xue   }
3120*dc5640d1SHerbert Xue }</pre>
3121*dc5640d1SHerbert Xue
3122*dc5640d1SHerbert Xue <h3>Multiple factory methods for the same type</h3>
3123*dc5640d1SHerbert Xue If the factory contains many methods that return the same type, you can create multiple
3124*dc5640d1SHerbert Xue constructors in your concrete class, each constructor marked with with
3125*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}, in order to match the different parameters types of the
3126*dc5640d1SHerbert Xue factory methods.
3127*dc5640d1SHerbert Xue
3128*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3129*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
3130*dc5640d1SHerbert Xue    Payment createWithoutDate(Money amount);
3131*dc5640d1SHerbert Xue }
3132*dc5640d1SHerbert Xue
3133*dc5640d1SHerbert Xue public class RealPayment implements Payment {
3134*dc5640d1SHerbert Xue  {@literal @}AssistedInject
3135*dc5640d1SHerbert Xue   public RealPayment(
3136*dc5640d1SHerbert Xue      CreditService creditService,
3137*dc5640d1SHerbert Xue      AuthService authService,
3138*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Date startDate</strong>,
3139*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3140*dc5640d1SHerbert Xue     ...
3141*dc5640d1SHerbert Xue   }
3142*dc5640d1SHerbert Xue
3143*dc5640d1SHerbert Xue  {@literal @}AssistedInject
3144*dc5640d1SHerbert Xue   public RealPayment(
3145*dc5640d1SHerbert Xue      CreditService creditService,
3146*dc5640d1SHerbert Xue      AuthService authService,
3147*dc5640d1SHerbert Xue     <strong>{@literal @}Assisted Money amount</strong>) {
3148*dc5640d1SHerbert Xue     ...
3149*dc5640d1SHerbert Xue   }
3150*dc5640d1SHerbert Xue }</pre>
3151*dc5640d1SHerbert Xue
3152*dc5640d1SHerbert Xue <h3>Configuring simple factories</h3>
3153*dc5640d1SHerbert Xue In your {@link Module module}, install a {@code FactoryModuleBuilder} that creates the
3154*dc5640d1SHerbert Xue factory:
3155*dc5640d1SHerbert Xue
3156*dc5640d1SHerbert Xue <pre>install(new FactoryModuleBuilder()
3157*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3158*dc5640d1SHerbert Xue     .build(PaymentFactory.class));</pre>
3159*dc5640d1SHerbert Xue
3160*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3161*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3162*dc5640d1SHerbert Xue
3163*dc5640d1SHerbert Xue <h3>Configuring complex factories</h3>
3164*dc5640d1SHerbert Xue Factories can create an arbitrary number of objects, one per each method.  Each factory
3165*dc5640d1SHerbert Xue method can be configured using <code>.implement</code>.
3166*dc5640d1SHerbert Xue
3167*dc5640d1SHerbert Xue <pre>public interface OrderFactory {
3168*dc5640d1SHerbert Xue    Payment create(Date startDate, Money amount);
3169*dc5640d1SHerbert Xue    Shipment create(Customer customer, Item item);
3170*dc5640d1SHerbert Xue    Receipt create(Payment payment, Shipment shipment);
3171*dc5640d1SHerbert Xue }
3172*dc5640d1SHerbert Xue
3173*dc5640d1SHerbert Xue [...]
3174*dc5640d1SHerbert Xue
3175*dc5640d1SHerbert Xue install(new FactoryModuleBuilder()
3176*dc5640d1SHerbert Xue     .implement(Payment.class, RealPayment.class)
3177*dc5640d1SHerbert Xue     // excluding .implement for Shipment means the implementation class
3178*dc5640d1SHerbert Xue     // will be 'Shipment' itself, which is legal if it's not an interface.
3179*dc5640d1SHerbert Xue     .implement(Receipt.class, RealReceipt.class)
3180*dc5640d1SHerbert Xue     .build(OrderFactory.class));</pre>
3181*dc5640d1SHerbert Xue </pre>
3182*dc5640d1SHerbert Xue
3183*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3184*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3185*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3186*dc5640d1SHerbert Xue
3187*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3188*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3189*dc5640d1SHerbert Xue
3190*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3191*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3192*dc5640d1SHerbert Xue     payment.apply();
3193*dc5640d1SHerbert Xue   }
3194*dc5640d1SHerbert Xue }</pre>
3195*dc5640d1SHerbert Xue
3196*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3197*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3198*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3199*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3200*dc5640d1SHerbert Xue
3201*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3202*dc5640d1SHerbert Xue   Payment create(
3203*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3204*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3205*dc5640d1SHerbert Xue       Money amount);
3206*dc5640d1SHerbert Xue } </pre>
3207*dc5640d1SHerbert Xue
3208*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3209*dc5640d1SHerbert Xue
3210*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3211*dc5640d1SHerbert Xue   {@literal @}Inject
3212*dc5640d1SHerbert Xue   public RealPayment(
3213*dc5640d1SHerbert Xue      CreditService creditService,
3214*dc5640d1SHerbert Xue      AuthService authService,
3215*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3216*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3217*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3218*dc5640d1SHerbert Xue     ...
3219*dc5640d1SHerbert Xue   }
3220*dc5640d1SHerbert Xue }</pre>
3221*dc5640d1SHerbert Xue
3222*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3223*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3224*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3225*dc5640d1SHerbert Xue returned.
3226*dc5640d1SHerbert Xue
3227*dc5640d1SHerbert Xue <h3>More configuration options</h3>
3228*dc5640d1SHerbert Xue In addition to simply specifying an implementation class for any returned type, factories' return
3229*dc5640d1SHerbert Xue values can be automatic or can be configured to use annotations:
3230*dc5640d1SHerbert Xue <p/>
3231*dc5640d1SHerbert Xue If you just want to return the types specified in the factory, do not configure any
3232*dc5640d1SHerbert Xue implementations:
3233*dc5640d1SHerbert Xue
3234*dc5640d1SHerbert Xue <pre>public interface FruitFactory {
3235*dc5640d1SHerbert Xue   Apple getApple(Color color);
3236*dc5640d1SHerbert Xue }
3237*dc5640d1SHerbert Xue ...
3238*dc5640d1SHerbert Xue protected void configure() {
3239*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder().build(FruitFactory.class));
3240*dc5640d1SHerbert Xue }</pre>
3241*dc5640d1SHerbert Xue
3242*dc5640d1SHerbert Xue Note that any type returned by the factory in this manner needs to be an implementation class.
3243*dc5640d1SHerbert Xue <p/>
3244*dc5640d1SHerbert Xue To return two different implementations for the same interface from your factory, use binding
3245*dc5640d1SHerbert Xue annotations on your return types:
3246*dc5640d1SHerbert Xue
3247*dc5640d1SHerbert Xue <pre>interface CarFactory {
3248*dc5640d1SHerbert Xue   {@literal @}Named("fast") Car getFastCar(Color color);
3249*dc5640d1SHerbert Xue   {@literal @}Named("clean") Car getCleanCar(Color color);
3250*dc5640d1SHerbert Xue }
3251*dc5640d1SHerbert Xue ...
3252*dc5640d1SHerbert Xue protected void configure() {
3253*dc5640d1SHerbert Xue   install(new FactoryModuleBuilder()
3254*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("fast"), Porsche.class)
3255*dc5640d1SHerbert Xue       .implement(Car.class, Names.named("clean"), Prius.class)
3256*dc5640d1SHerbert Xue       .build(CarFactory.class));
3257*dc5640d1SHerbert Xue }</pre>
3258*dc5640d1SHerbert Xue
3259*dc5640d1SHerbert Xue <h3>Implementation limitations</h3>
3260*dc5640d1SHerbert Xue As a limitation of the implementation, it is prohibited to declare a factory method that
3261*dc5640d1SHerbert Xue accepts a {@code Provider} as one of its arguments.
3262*dc5640d1SHerbert Xue
3263*dc5640d1SHerbert Xue @since 3.0
3264*dc5640d1SHerbert Xue @author [email protected] (Peter Schmitt)]]>
3265*dc5640d1SHerbert Xue    </doc>
3266*dc5640d1SHerbert Xue  </class>
3267*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryModuleBuilder -->
3268*dc5640d1SHerbert Xue  <!-- start class com.google.inject.assistedinject.FactoryProvider -->
3269*dc5640d1SHerbert Xue  <class name="FactoryProvider" extends="java.lang.Object"
3270*dc5640d1SHerbert Xue    abstract="false"
3271*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3272*dc5640d1SHerbert Xue    deprecated="use {@link FactoryModuleBuilder} instead.">
3273*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;F&gt;"/>
3274*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
3275*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3276*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3277*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3278*dc5640d1SHerbert Xue      deprecated="not deprecated">
3279*dc5640d1SHerbert Xue      <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
3280*dc5640d1SHerbert Xue      <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
3281*dc5640d1SHerbert Xue    </method>
3282*dc5640d1SHerbert Xue    <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
3283*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3284*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3285*dc5640d1SHerbert Xue      deprecated="not deprecated">
3286*dc5640d1SHerbert Xue      <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
3287*dc5640d1SHerbert Xue      <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
3288*dc5640d1SHerbert Xue    </method>
3289*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
3290*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3291*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3292*dc5640d1SHerbert Xue      deprecated="not deprecated">
3293*dc5640d1SHerbert Xue    </method>
3294*dc5640d1SHerbert Xue    <method name="get" return="F"
3295*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3296*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3297*dc5640d1SHerbert Xue      deprecated="not deprecated">
3298*dc5640d1SHerbert Xue    </method>
3299*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
3300*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3301*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3302*dc5640d1SHerbert Xue      deprecated="not deprecated">
3303*dc5640d1SHerbert Xue    </method>
3304*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
3305*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3306*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3307*dc5640d1SHerbert Xue      deprecated="not deprecated">
3308*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
3309*dc5640d1SHerbert Xue    </method>
3310*dc5640d1SHerbert Xue    <doc>
3311*dc5640d1SHerbert Xue    <![CDATA[<strong>Obsolete.</strong> Prefer {@link FactoryModuleBuilder} for its more concise API and
3312*dc5640d1SHerbert Xue additional capability.
3313*dc5640d1SHerbert Xue
3314*dc5640d1SHerbert Xue <p>Provides a factory that combines the caller's arguments with injector-supplied values to
3315*dc5640d1SHerbert Xue construct objects.
3316*dc5640d1SHerbert Xue
3317*dc5640d1SHerbert Xue <h3>Defining a factory</h3>
3318*dc5640d1SHerbert Xue Create an interface whose methods return the constructed type, or any of its supertypes. The
3319*dc5640d1SHerbert Xue method's parameters are the arguments required to build the constructed type.
3320*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3321*dc5640d1SHerbert Xue   Payment create(Date startDate, Money amount);
3322*dc5640d1SHerbert Xue }</pre>
3323*dc5640d1SHerbert Xue You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
3324*dc5640d1SHerbert Xue or <i>newPayment</i>.
3325*dc5640d1SHerbert Xue
3326*dc5640d1SHerbert Xue <h3>Creating a type that accepts factory parameters</h3>
3327*dc5640d1SHerbert Xue {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
3328*dc5640d1SHerbert Xue constructor. In addition to injector-supplied parameters, the constructor should have
3329*dc5640d1SHerbert Xue parameters that match each of the factory method's parameters. Each factory-supplied parameter
3330*dc5640d1SHerbert Xue requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
3331*dc5640d1SHerbert Xue is not bound by your application's modules.
3332*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3333*dc5640d1SHerbert Xue   {@literal @}Inject
3334*dc5640d1SHerbert Xue   public RealPayment(
3335*dc5640d1SHerbert Xue      CreditService creditService,
3336*dc5640d1SHerbert Xue      AuthService authService,
3337*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Date startDate</strong>,
3338*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted Money amount</strong>) {
3339*dc5640d1SHerbert Xue     ...
3340*dc5640d1SHerbert Xue   }
3341*dc5640d1SHerbert Xue }</pre>
3342*dc5640d1SHerbert Xue Any parameter that permits a null value should also be annotated {@code @Nullable}.
3343*dc5640d1SHerbert Xue
3344*dc5640d1SHerbert Xue <h3>Configuring factories</h3>
3345*dc5640d1SHerbert Xue In your {@link com.google.inject.Module module}, bind the factory interface to the returned
3346*dc5640d1SHerbert Xue factory:
3347*dc5640d1SHerbert Xue <pre>bind(PaymentFactory.class).toProvider(
3348*dc5640d1SHerbert Xue     FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
3349*dc5640d1SHerbert Xue As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
3350*dc5640d1SHerbert Xue factory cannot be used until the injector has been initialized.
3351*dc5640d1SHerbert Xue
3352*dc5640d1SHerbert Xue <h3>Using the factory</h3>
3353*dc5640d1SHerbert Xue Inject your factory into your application classes. When you use the factory, your arguments
3354*dc5640d1SHerbert Xue will be combined with values from the injector to construct an instance.
3355*dc5640d1SHerbert Xue <pre>public class PaymentAction {
3356*dc5640d1SHerbert Xue   {@literal @}Inject private PaymentFactory paymentFactory;
3357*dc5640d1SHerbert Xue
3358*dc5640d1SHerbert Xue   public void doPayment(Money amount) {
3359*dc5640d1SHerbert Xue     Payment payment = paymentFactory.create(new Date(), amount);
3360*dc5640d1SHerbert Xue     payment.apply();
3361*dc5640d1SHerbert Xue   }
3362*dc5640d1SHerbert Xue }</pre>
3363*dc5640d1SHerbert Xue
3364*dc5640d1SHerbert Xue <h3>Making parameter types distinct</h3>
3365*dc5640d1SHerbert Xue The types of the factory method's parameters must be distinct. To use multiple parameters of
3366*dc5640d1SHerbert Xue the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
3367*dc5640d1SHerbert Xue parameters. The names must be applied to the factory method's parameters:
3368*dc5640d1SHerbert Xue
3369*dc5640d1SHerbert Xue <pre>public interface PaymentFactory {
3370*dc5640d1SHerbert Xue   Payment create(
3371*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3372*dc5640d1SHerbert Xue       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3373*dc5640d1SHerbert Xue       Money amount);
3374*dc5640d1SHerbert Xue } </pre>
3375*dc5640d1SHerbert Xue ...and to the concrete type's constructor parameters:
3376*dc5640d1SHerbert Xue <pre>public class RealPayment implements Payment {
3377*dc5640d1SHerbert Xue   {@literal @}Inject
3378*dc5640d1SHerbert Xue   public RealPayment(
3379*dc5640d1SHerbert Xue      CreditService creditService,
3380*dc5640d1SHerbert Xue      AuthService authService,
3381*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
3382*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
3383*dc5640d1SHerbert Xue      <strong>{@literal @}Assisted</strong> Money amount) {
3384*dc5640d1SHerbert Xue     ...
3385*dc5640d1SHerbert Xue   }
3386*dc5640d1SHerbert Xue }</pre>
3387*dc5640d1SHerbert Xue
3388*dc5640d1SHerbert Xue <h3>Values are created by Guice</h3>
3389*dc5640d1SHerbert Xue Returned factories use child injectors to create values. The values are eligible for method
3390*dc5640d1SHerbert Xue interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
3391*dc5640d1SHerbert Xue returned.
3392*dc5640d1SHerbert Xue
3393*dc5640d1SHerbert Xue <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
3394*dc5640d1SHerbert Xue Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
3395*dc5640d1SHerbert Xue {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
3396*dc5640d1SHerbert Xue
3397*dc5640d1SHerbert Xue <p>Instead of matching factory method arguments to constructor parameters using their names, the
3398*dc5640d1SHerbert Xue <strong>parameters are matched by their order</strong>. The first factory method argument is
3399*dc5640d1SHerbert Xue used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
3400*dc5640d1SHerbert Xue effect.
3401*dc5640d1SHerbert Xue
3402*dc5640d1SHerbert Xue <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
3403*dc5640d1SHerbert Xue method interception. They do receive post-construction member injection.
3404*dc5640d1SHerbert Xue
3405*dc5640d1SHerbert Xue @param <F> The factory interface
3406*dc5640d1SHerbert Xue
3407*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
3408*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3409*dc5640d1SHerbert Xue @author [email protected] (Daniel Martin)
3410*dc5640d1SHerbert Xue
3411*dc5640d1SHerbert Xue @deprecated use {@link FactoryModuleBuilder} instead.]]>
3412*dc5640d1SHerbert Xue    </doc>
3413*dc5640d1SHerbert Xue  </class>
3414*dc5640d1SHerbert Xue  <!-- end class com.google.inject.assistedinject.FactoryProvider -->
3415*dc5640d1SHerbert Xue</package>
3416*dc5640d1SHerbert Xue<package name="com.google.inject.binder">
3417*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
3418*dc5640d1SHerbert Xue  <interface name="AnnotatedBindingBuilder"    abstract="true"
3419*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3420*dc5640d1SHerbert Xue    deprecated="not deprecated">
3421*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
3422*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3423*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3424*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3425*dc5640d1SHerbert Xue      deprecated="not deprecated">
3426*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3427*dc5640d1SHerbert Xue      <doc>
3428*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3429*dc5640d1SHerbert Xue      </doc>
3430*dc5640d1SHerbert Xue    </method>
3431*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
3432*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3433*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3434*dc5640d1SHerbert Xue      deprecated="not deprecated">
3435*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3436*dc5640d1SHerbert Xue      <doc>
3437*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3438*dc5640d1SHerbert Xue      </doc>
3439*dc5640d1SHerbert Xue    </method>
3440*dc5640d1SHerbert Xue    <doc>
3441*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3442*dc5640d1SHerbert Xue
3443*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3444*dc5640d1SHerbert Xue    </doc>
3445*dc5640d1SHerbert Xue  </interface>
3446*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
3447*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3448*dc5640d1SHerbert Xue  <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
3449*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3450*dc5640d1SHerbert Xue    deprecated="not deprecated">
3451*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3452*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3453*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3454*dc5640d1SHerbert Xue      deprecated="not deprecated">
3455*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3456*dc5640d1SHerbert Xue      <doc>
3457*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3458*dc5640d1SHerbert Xue      </doc>
3459*dc5640d1SHerbert Xue    </method>
3460*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
3461*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3462*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3463*dc5640d1SHerbert Xue      deprecated="not deprecated">
3464*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3465*dc5640d1SHerbert Xue      <doc>
3466*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3467*dc5640d1SHerbert Xue      </doc>
3468*dc5640d1SHerbert Xue    </method>
3469*dc5640d1SHerbert Xue    <doc>
3470*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3471*dc5640d1SHerbert Xue
3472*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3473*dc5640d1SHerbert Xue    </doc>
3474*dc5640d1SHerbert Xue  </interface>
3475*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
3476*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
3477*dc5640d1SHerbert Xue  <interface name="AnnotatedElementBuilder"    abstract="true"
3478*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3479*dc5640d1SHerbert Xue    deprecated="not deprecated">
3480*dc5640d1SHerbert Xue    <method name="annotatedWith"
3481*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3482*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3483*dc5640d1SHerbert Xue      deprecated="not deprecated">
3484*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3485*dc5640d1SHerbert Xue      <doc>
3486*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3487*dc5640d1SHerbert Xue      </doc>
3488*dc5640d1SHerbert Xue    </method>
3489*dc5640d1SHerbert Xue    <method name="annotatedWith"
3490*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3491*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3492*dc5640d1SHerbert Xue      deprecated="not deprecated">
3493*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
3494*dc5640d1SHerbert Xue      <doc>
3495*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3496*dc5640d1SHerbert Xue      </doc>
3497*dc5640d1SHerbert Xue    </method>
3498*dc5640d1SHerbert Xue    <doc>
3499*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3500*dc5640d1SHerbert Xue
3501*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
3502*dc5640d1SHerbert Xue @since 2.0]]>
3503*dc5640d1SHerbert Xue    </doc>
3504*dc5640d1SHerbert Xue  </interface>
3505*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
3506*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
3507*dc5640d1SHerbert Xue  <interface name="ConstantBindingBuilder"    abstract="true"
3508*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3509*dc5640d1SHerbert Xue    deprecated="not deprecated">
3510*dc5640d1SHerbert Xue    <method name="to"
3511*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3512*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3513*dc5640d1SHerbert Xue      deprecated="not deprecated">
3514*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
3515*dc5640d1SHerbert Xue      <doc>
3516*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3517*dc5640d1SHerbert Xue      </doc>
3518*dc5640d1SHerbert Xue    </method>
3519*dc5640d1SHerbert Xue    <method name="to"
3520*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3521*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3522*dc5640d1SHerbert Xue      deprecated="not deprecated">
3523*dc5640d1SHerbert Xue      <param name="value" type="int"/>
3524*dc5640d1SHerbert Xue      <doc>
3525*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3526*dc5640d1SHerbert Xue      </doc>
3527*dc5640d1SHerbert Xue    </method>
3528*dc5640d1SHerbert Xue    <method name="to"
3529*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3530*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3531*dc5640d1SHerbert Xue      deprecated="not deprecated">
3532*dc5640d1SHerbert Xue      <param name="value" type="long"/>
3533*dc5640d1SHerbert Xue      <doc>
3534*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3535*dc5640d1SHerbert Xue      </doc>
3536*dc5640d1SHerbert Xue    </method>
3537*dc5640d1SHerbert Xue    <method name="to"
3538*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3539*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3540*dc5640d1SHerbert Xue      deprecated="not deprecated">
3541*dc5640d1SHerbert Xue      <param name="value" type="boolean"/>
3542*dc5640d1SHerbert Xue      <doc>
3543*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3544*dc5640d1SHerbert Xue      </doc>
3545*dc5640d1SHerbert Xue    </method>
3546*dc5640d1SHerbert Xue    <method name="to"
3547*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3548*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3549*dc5640d1SHerbert Xue      deprecated="not deprecated">
3550*dc5640d1SHerbert Xue      <param name="value" type="double"/>
3551*dc5640d1SHerbert Xue      <doc>
3552*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3553*dc5640d1SHerbert Xue      </doc>
3554*dc5640d1SHerbert Xue    </method>
3555*dc5640d1SHerbert Xue    <method name="to"
3556*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3557*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3558*dc5640d1SHerbert Xue      deprecated="not deprecated">
3559*dc5640d1SHerbert Xue      <param name="value" type="float"/>
3560*dc5640d1SHerbert Xue      <doc>
3561*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3562*dc5640d1SHerbert Xue      </doc>
3563*dc5640d1SHerbert Xue    </method>
3564*dc5640d1SHerbert Xue    <method name="to"
3565*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3566*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3567*dc5640d1SHerbert Xue      deprecated="not deprecated">
3568*dc5640d1SHerbert Xue      <param name="value" type="short"/>
3569*dc5640d1SHerbert Xue      <doc>
3570*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3571*dc5640d1SHerbert Xue      </doc>
3572*dc5640d1SHerbert Xue    </method>
3573*dc5640d1SHerbert Xue    <method name="to"
3574*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3575*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3576*dc5640d1SHerbert Xue      deprecated="not deprecated">
3577*dc5640d1SHerbert Xue      <param name="value" type="char"/>
3578*dc5640d1SHerbert Xue      <doc>
3579*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3580*dc5640d1SHerbert Xue      </doc>
3581*dc5640d1SHerbert Xue    </method>
3582*dc5640d1SHerbert Xue    <method name="to"
3583*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3584*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3585*dc5640d1SHerbert Xue      deprecated="not deprecated">
3586*dc5640d1SHerbert Xue      <param name="value" type="byte"/>
3587*dc5640d1SHerbert Xue      <doc>
3588*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.
3589*dc5640d1SHerbert Xue
3590*dc5640d1SHerbert Xue @since 3.0]]>
3591*dc5640d1SHerbert Xue      </doc>
3592*dc5640d1SHerbert Xue    </method>
3593*dc5640d1SHerbert Xue    <method name="to"
3594*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3595*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3596*dc5640d1SHerbert Xue      deprecated="not deprecated">
3597*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Class&lt;?&gt;"/>
3598*dc5640d1SHerbert Xue      <doc>
3599*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3600*dc5640d1SHerbert Xue      </doc>
3601*dc5640d1SHerbert Xue    </method>
3602*dc5640d1SHerbert Xue    <method name="to"
3603*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3604*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3605*dc5640d1SHerbert Xue      deprecated="not deprecated">
3606*dc5640d1SHerbert Xue      <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
3607*dc5640d1SHerbert Xue      <doc>
3608*dc5640d1SHerbert Xue      <![CDATA[Binds constant to the given value.]]>
3609*dc5640d1SHerbert Xue      </doc>
3610*dc5640d1SHerbert Xue    </method>
3611*dc5640d1SHerbert Xue    <doc>
3612*dc5640d1SHerbert Xue    <![CDATA[Binds to a constant value.]]>
3613*dc5640d1SHerbert Xue    </doc>
3614*dc5640d1SHerbert Xue  </interface>
3615*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
3616*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
3617*dc5640d1SHerbert Xue  <interface name="LinkedBindingBuilder"    abstract="true"
3618*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3619*dc5640d1SHerbert Xue    deprecated="not deprecated">
3620*dc5640d1SHerbert Xue    <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
3621*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3622*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3623*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3624*dc5640d1SHerbert Xue      deprecated="not deprecated">
3625*dc5640d1SHerbert Xue      <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
3626*dc5640d1SHerbert Xue      <doc>
3627*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3628*dc5640d1SHerbert Xue      </doc>
3629*dc5640d1SHerbert Xue    </method>
3630*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3631*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3632*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3633*dc5640d1SHerbert Xue      deprecated="not deprecated">
3634*dc5640d1SHerbert Xue      <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
3635*dc5640d1SHerbert Xue      <doc>
3636*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3637*dc5640d1SHerbert Xue      </doc>
3638*dc5640d1SHerbert Xue    </method>
3639*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
3640*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3641*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3642*dc5640d1SHerbert Xue      deprecated="not deprecated">
3643*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
3644*dc5640d1SHerbert Xue      <doc>
3645*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3646*dc5640d1SHerbert Xue      </doc>
3647*dc5640d1SHerbert Xue    </method>
3648*dc5640d1SHerbert Xue    <method name="toInstance"
3649*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3650*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3651*dc5640d1SHerbert Xue      deprecated="not deprecated">
3652*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
3653*dc5640d1SHerbert Xue      <doc>
3654*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3655*dc5640d1SHerbert Xue
3656*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3657*dc5640d1SHerbert Xue      </doc>
3658*dc5640d1SHerbert Xue    </method>
3659*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3660*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3661*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3662*dc5640d1SHerbert Xue      deprecated="not deprecated">
3663*dc5640d1SHerbert Xue      <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
3664*dc5640d1SHerbert Xue      <doc>
3665*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3666*dc5640d1SHerbert Xue
3667*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers]]>
3668*dc5640d1SHerbert Xue      </doc>
3669*dc5640d1SHerbert Xue    </method>
3670*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3671*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3672*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3673*dc5640d1SHerbert Xue      deprecated="not deprecated">
3674*dc5640d1SHerbert Xue      <param name="provider" type="javax.inject.Provider&lt;? extends T&gt;"/>
3675*dc5640d1SHerbert Xue      <doc>
3676*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3677*dc5640d1SHerbert Xue
3678*dc5640d1SHerbert Xue @see com.google.inject.Injector#injectMembers
3679*dc5640d1SHerbert Xue @since 4.0]]>
3680*dc5640d1SHerbert Xue      </doc>
3681*dc5640d1SHerbert Xue    </method>
3682*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3683*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3684*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3685*dc5640d1SHerbert Xue      deprecated="not deprecated">
3686*dc5640d1SHerbert Xue      <param name="providerType" type="java.lang.Class&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3687*dc5640d1SHerbert Xue      <doc>
3688*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3689*dc5640d1SHerbert Xue      </doc>
3690*dc5640d1SHerbert Xue    </method>
3691*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3692*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3693*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3694*dc5640d1SHerbert Xue      deprecated="not deprecated">
3695*dc5640d1SHerbert Xue      <param name="providerType" type="com.google.inject.TypeLiteral&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3696*dc5640d1SHerbert Xue      <doc>
3697*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3698*dc5640d1SHerbert Xue      </doc>
3699*dc5640d1SHerbert Xue    </method>
3700*dc5640d1SHerbert Xue    <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
3701*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3702*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3703*dc5640d1SHerbert Xue      deprecated="not deprecated">
3704*dc5640d1SHerbert Xue      <param name="providerKey" type="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&gt;"/>
3705*dc5640d1SHerbert Xue      <doc>
3706*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3707*dc5640d1SHerbert Xue      </doc>
3708*dc5640d1SHerbert Xue    </method>
3709*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3710*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3711*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3712*dc5640d1SHerbert Xue      deprecated="not deprecated">
3713*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3714*dc5640d1SHerbert Xue      <doc>
3715*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3716*dc5640d1SHerbert Xue
3717*dc5640d1SHerbert Xue @since 3.0]]>
3718*dc5640d1SHerbert Xue      </doc>
3719*dc5640d1SHerbert Xue    </method>
3720*dc5640d1SHerbert Xue    <method name="toConstructor" return="com.google.inject.binder.ScopedBindingBuilder"
3721*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3722*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3723*dc5640d1SHerbert Xue      deprecated="not deprecated">
3724*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;S&gt;"/>
3725*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends S&gt;"/>
3726*dc5640d1SHerbert Xue      <doc>
3727*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3728*dc5640d1SHerbert Xue
3729*dc5640d1SHerbert Xue @since 3.0]]>
3730*dc5640d1SHerbert Xue      </doc>
3731*dc5640d1SHerbert Xue    </method>
3732*dc5640d1SHerbert Xue    <doc>
3733*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3734*dc5640d1SHerbert Xue
3735*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3736*dc5640d1SHerbert Xue    </doc>
3737*dc5640d1SHerbert Xue  </interface>
3738*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
3739*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
3740*dc5640d1SHerbert Xue  <interface name="ScopedBindingBuilder"    abstract="true"
3741*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3742*dc5640d1SHerbert Xue    deprecated="not deprecated">
3743*dc5640d1SHerbert Xue    <method name="in"
3744*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3745*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3746*dc5640d1SHerbert Xue      deprecated="not deprecated">
3747*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
3748*dc5640d1SHerbert Xue      <doc>
3749*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3750*dc5640d1SHerbert Xue      </doc>
3751*dc5640d1SHerbert Xue    </method>
3752*dc5640d1SHerbert Xue    <method name="in"
3753*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3754*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3755*dc5640d1SHerbert Xue      deprecated="not deprecated">
3756*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
3757*dc5640d1SHerbert Xue      <doc>
3758*dc5640d1SHerbert Xue      <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
3759*dc5640d1SHerbert Xue      </doc>
3760*dc5640d1SHerbert Xue    </method>
3761*dc5640d1SHerbert Xue    <method name="asEagerSingleton"
3762*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3763*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3764*dc5640d1SHerbert Xue      deprecated="not deprecated">
3765*dc5640d1SHerbert Xue      <doc>
3766*dc5640d1SHerbert Xue      <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
3767*dc5640d1SHerbert Xue singleton-scoped binding upon creation. Useful for application
3768*dc5640d1SHerbert Xue initialization logic.  See the EDSL examples at
3769*dc5640d1SHerbert Xue {@link com.google.inject.Binder}.]]>
3770*dc5640d1SHerbert Xue      </doc>
3771*dc5640d1SHerbert Xue    </method>
3772*dc5640d1SHerbert Xue    <doc>
3773*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
3774*dc5640d1SHerbert Xue
3775*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
3776*dc5640d1SHerbert Xue    </doc>
3777*dc5640d1SHerbert Xue  </interface>
3778*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
3779*dc5640d1SHerbert Xue</package>
3780*dc5640d1SHerbert Xue<package name="com.google.inject.daggeradapter">
3781*dc5640d1SHerbert Xue  <!-- start class com.google.inject.daggeradapter.DaggerAdapter -->
3782*dc5640d1SHerbert Xue  <class name="DaggerAdapter" extends="java.lang.Object"
3783*dc5640d1SHerbert Xue    abstract="false"
3784*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
3785*dc5640d1SHerbert Xue    deprecated="not deprecated">
3786*dc5640d1SHerbert Xue    <method name="from" return="com.google.inject.Module"
3787*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3788*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
3789*dc5640d1SHerbert Xue      deprecated="not deprecated">
3790*dc5640d1SHerbert Xue      <param name="daggerModuleObjects" type="java.lang.Object[]"/>
3791*dc5640d1SHerbert Xue      <doc>
3792*dc5640d1SHerbert Xue      <![CDATA[Returns a guice module from a dagger module.
3793*dc5640d1SHerbert Xue
3794*dc5640d1SHerbert Xue <p>Note: At present, it does not honor {@code @Module(includes=...)} directives.]]>
3795*dc5640d1SHerbert Xue      </doc>
3796*dc5640d1SHerbert Xue    </method>
3797*dc5640d1SHerbert Xue    <doc>
3798*dc5640d1SHerbert Xue    <![CDATA[A utility to adapt classes annotated with {@link @dagger.Module} such that their
3799*dc5640d1SHerbert Xue {@link @dagger.Provides} methods can be properly invoked by Guice to perform their
3800*dc5640d1SHerbert Xue provision operations.
3801*dc5640d1SHerbert Xue
3802*dc5640d1SHerbert Xue <p>Simple example: <pre>{@code
3803*dc5640d1SHerbert Xue   Guice.createInjector(...other modules..., DaggerAdapter.from(new SomeDaggerAdapter()));
3804*dc5640d1SHerbert Xue }</pre>
3805*dc5640d1SHerbert Xue
3806*dc5640d1SHerbert Xue <p>Some notes on usage and compatibility.
3807*dc5640d1SHerbert Xue   <ul>
3808*dc5640d1SHerbert Xue     <li>Dagger provider methods have a "SET_VALUES" provision mode not supported by Guice.
3809*dc5640d1SHerbert Xue     <li>MapBindings are not yet implemented (pending).
3810*dc5640d1SHerbert Xue     <li>Be careful about stateful modules. In contrast to Dagger (where components are
3811*dc5640d1SHerbert Xue         expected to be recreated on-demand with new Module instances), Guice typically
3812*dc5640d1SHerbert Xue         has a single injector with a long lifetime, so your module instance will be used
3813*dc5640d1SHerbert Xue         throughout the lifetime of the entire app.
3814*dc5640d1SHerbert Xue     <li>Dagger 1.x uses {@link @Singleton} for all scopes, including shorter-lived scopes
3815*dc5640d1SHerbert Xue         like per-request or per-activity.  Using modules written with Dagger 1.x usage
3816*dc5640d1SHerbert Xue         in mind may result in mis-scoped objects.
3817*dc5640d1SHerbert Xue     <li>Dagger 2.x supports custom scope annotations, but for use in Guice, a custom scope
3818*dc5640d1SHerbert Xue         implementation must be registered in order to support the custom lifetime of that
3819*dc5640d1SHerbert Xue         annotation.
3820*dc5640d1SHerbert Xue   </ul>
3821*dc5640d1SHerbert Xue
3822*dc5640d1SHerbert Xue @author [email protected] (Christian Gruber)]]>
3823*dc5640d1SHerbert Xue    </doc>
3824*dc5640d1SHerbert Xue  </class>
3825*dc5640d1SHerbert Xue  <!-- end class com.google.inject.daggeradapter.DaggerAdapter -->
3826*dc5640d1SHerbert Xue</package>
3827*dc5640d1SHerbert Xue<package name="com.google.inject.grapher">
3828*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher -->
3829*dc5640d1SHerbert Xue  <class name="AbstractInjectorGrapher" extends="java.lang.Object"
3830*dc5640d1SHerbert Xue    abstract="true"
3831*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
3832*dc5640d1SHerbert Xue    deprecated="not deprecated">
3833*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.InjectorGrapher"/>
3834*dc5640d1SHerbert Xue    <constructor name="AbstractInjectorGrapher"
3835*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3836*dc5640d1SHerbert Xue      deprecated="not deprecated">
3837*dc5640d1SHerbert Xue    </constructor>
3838*dc5640d1SHerbert Xue    <constructor name="AbstractInjectorGrapher" type="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3839*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3840*dc5640d1SHerbert Xue      deprecated="not deprecated">
3841*dc5640d1SHerbert Xue    </constructor>
3842*dc5640d1SHerbert Xue    <method name="graph"
3843*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3844*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
3845*dc5640d1SHerbert Xue      deprecated="not deprecated">
3846*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
3847*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3848*dc5640d1SHerbert Xue    </method>
3849*dc5640d1SHerbert Xue    <method name="graph"
3850*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3851*dc5640d1SHerbert Xue      static="false" final="true" visibility="public"
3852*dc5640d1SHerbert Xue      deprecated="not deprecated">
3853*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
3854*dc5640d1SHerbert Xue      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
3855*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3856*dc5640d1SHerbert Xue    </method>
3857*dc5640d1SHerbert Xue    <method name="reset"
3858*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3859*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3860*dc5640d1SHerbert Xue      deprecated="not deprecated">
3861*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3862*dc5640d1SHerbert Xue      <doc>
3863*dc5640d1SHerbert Xue      <![CDATA[Resets the state of the grapher before rendering a new graph.]]>
3864*dc5640d1SHerbert Xue      </doc>
3865*dc5640d1SHerbert Xue    </method>
3866*dc5640d1SHerbert Xue    <method name="newInterfaceNode"
3867*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3868*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3869*dc5640d1SHerbert Xue      deprecated="not deprecated">
3870*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
3871*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3872*dc5640d1SHerbert Xue      <doc>
3873*dc5640d1SHerbert Xue      <![CDATA[Adds a new interface node to the graph.]]>
3874*dc5640d1SHerbert Xue      </doc>
3875*dc5640d1SHerbert Xue    </method>
3876*dc5640d1SHerbert Xue    <method name="newImplementationNode"
3877*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3878*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3879*dc5640d1SHerbert Xue      deprecated="not deprecated">
3880*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
3881*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3882*dc5640d1SHerbert Xue      <doc>
3883*dc5640d1SHerbert Xue      <![CDATA[Adds a new implementation node to the graph.]]>
3884*dc5640d1SHerbert Xue      </doc>
3885*dc5640d1SHerbert Xue    </method>
3886*dc5640d1SHerbert Xue    <method name="newInstanceNode"
3887*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3888*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3889*dc5640d1SHerbert Xue      deprecated="not deprecated">
3890*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
3891*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3892*dc5640d1SHerbert Xue      <doc>
3893*dc5640d1SHerbert Xue      <![CDATA[Adds a new instance node to the graph.]]>
3894*dc5640d1SHerbert Xue      </doc>
3895*dc5640d1SHerbert Xue    </method>
3896*dc5640d1SHerbert Xue    <method name="newDependencyEdge"
3897*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3898*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3899*dc5640d1SHerbert Xue      deprecated="not deprecated">
3900*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
3901*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3902*dc5640d1SHerbert Xue      <doc>
3903*dc5640d1SHerbert Xue      <![CDATA[Adds a new dependency edge to the graph.]]>
3904*dc5640d1SHerbert Xue      </doc>
3905*dc5640d1SHerbert Xue    </method>
3906*dc5640d1SHerbert Xue    <method name="newBindingEdge"
3907*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3908*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3909*dc5640d1SHerbert Xue      deprecated="not deprecated">
3910*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
3911*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3912*dc5640d1SHerbert Xue      <doc>
3913*dc5640d1SHerbert Xue      <![CDATA[Adds a new binding edge to the graph.]]>
3914*dc5640d1SHerbert Xue      </doc>
3915*dc5640d1SHerbert Xue    </method>
3916*dc5640d1SHerbert Xue    <method name="postProcess"
3917*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
3918*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
3919*dc5640d1SHerbert Xue      deprecated="not deprecated">
3920*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
3921*dc5640d1SHerbert Xue      <doc>
3922*dc5640d1SHerbert Xue      <![CDATA[Performs any post processing required after all nodes and edges have been added.]]>
3923*dc5640d1SHerbert Xue      </doc>
3924*dc5640d1SHerbert Xue    </method>
3925*dc5640d1SHerbert Xue    <doc>
3926*dc5640d1SHerbert Xue    <![CDATA[Abstract injector grapher that builds the dependency graph but doesn't render it.
3927*dc5640d1SHerbert Xue
3928*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
3929*dc5640d1SHerbert Xue @since 4.0]]>
3930*dc5640d1SHerbert Xue    </doc>
3931*dc5640d1SHerbert Xue  </class>
3932*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher -->
3933*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3934*dc5640d1SHerbert Xue  <class name="AbstractInjectorGrapher.GrapherParameters" extends="java.lang.Object"
3935*dc5640d1SHerbert Xue    abstract="false"
3936*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
3937*dc5640d1SHerbert Xue    deprecated="not deprecated">
3938*dc5640d1SHerbert Xue    <constructor name="GrapherParameters"
3939*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3940*dc5640d1SHerbert Xue      deprecated="not deprecated">
3941*dc5640d1SHerbert Xue    </constructor>
3942*dc5640d1SHerbert Xue    <method name="getRootKeySetCreator" return="com.google.inject.grapher.RootKeySetCreator"
3943*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3944*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3945*dc5640d1SHerbert Xue      deprecated="not deprecated">
3946*dc5640d1SHerbert Xue    </method>
3947*dc5640d1SHerbert Xue    <method name="setRootKeySetCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3948*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3949*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3950*dc5640d1SHerbert Xue      deprecated="not deprecated">
3951*dc5640d1SHerbert Xue      <param name="rootKeySetCreator" type="com.google.inject.grapher.RootKeySetCreator"/>
3952*dc5640d1SHerbert Xue    </method>
3953*dc5640d1SHerbert Xue    <method name="getAliasCreator" return="com.google.inject.grapher.AliasCreator"
3954*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3955*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3956*dc5640d1SHerbert Xue      deprecated="not deprecated">
3957*dc5640d1SHerbert Xue    </method>
3958*dc5640d1SHerbert Xue    <method name="setAliasCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3959*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3960*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3961*dc5640d1SHerbert Xue      deprecated="not deprecated">
3962*dc5640d1SHerbert Xue      <param name="aliasCreator" type="com.google.inject.grapher.AliasCreator"/>
3963*dc5640d1SHerbert Xue    </method>
3964*dc5640d1SHerbert Xue    <method name="getNodeCreator" return="com.google.inject.grapher.NodeCreator"
3965*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3966*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3967*dc5640d1SHerbert Xue      deprecated="not deprecated">
3968*dc5640d1SHerbert Xue    </method>
3969*dc5640d1SHerbert Xue    <method name="setNodeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3970*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3971*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3972*dc5640d1SHerbert Xue      deprecated="not deprecated">
3973*dc5640d1SHerbert Xue      <param name="nodeCreator" type="com.google.inject.grapher.NodeCreator"/>
3974*dc5640d1SHerbert Xue    </method>
3975*dc5640d1SHerbert Xue    <method name="getEdgeCreator" return="com.google.inject.grapher.EdgeCreator"
3976*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3977*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3978*dc5640d1SHerbert Xue      deprecated="not deprecated">
3979*dc5640d1SHerbert Xue    </method>
3980*dc5640d1SHerbert Xue    <method name="setEdgeCreator" return="com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters"
3981*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
3982*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3983*dc5640d1SHerbert Xue      deprecated="not deprecated">
3984*dc5640d1SHerbert Xue      <param name="edgeCreator" type="com.google.inject.grapher.EdgeCreator"/>
3985*dc5640d1SHerbert Xue    </method>
3986*dc5640d1SHerbert Xue    <doc>
3987*dc5640d1SHerbert Xue    <![CDATA[Parameters used to override default settings of the grapher.
3988*dc5640d1SHerbert Xue @since 4.0]]>
3989*dc5640d1SHerbert Xue    </doc>
3990*dc5640d1SHerbert Xue  </class>
3991*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.AbstractInjectorGrapher.GrapherParameters -->
3992*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Alias -->
3993*dc5640d1SHerbert Xue  <class name="Alias" extends="java.lang.Object"
3994*dc5640d1SHerbert Xue    abstract="false"
3995*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
3996*dc5640d1SHerbert Xue    deprecated="not deprecated">
3997*dc5640d1SHerbert Xue    <constructor name="Alias" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
3998*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
3999*dc5640d1SHerbert Xue      deprecated="not deprecated">
4000*dc5640d1SHerbert Xue    </constructor>
4001*dc5640d1SHerbert Xue    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4002*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4003*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4004*dc5640d1SHerbert Xue      deprecated="not deprecated">
4005*dc5640d1SHerbert Xue    </method>
4006*dc5640d1SHerbert Xue    <method name="getToId" return="com.google.inject.grapher.NodeId"
4007*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4008*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4009*dc5640d1SHerbert Xue      deprecated="not deprecated">
4010*dc5640d1SHerbert Xue    </method>
4011*dc5640d1SHerbert Xue    <doc>
4012*dc5640d1SHerbert Xue    <![CDATA[Alias between two nodes. Causes the 'from' node to be aliased with the 'to' node, which means
4013*dc5640d1SHerbert Xue that the 'from' node is not rendered and all edges going to it instead go to the 'to' node.
4014*dc5640d1SHerbert Xue
4015*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4016*dc5640d1SHerbert Xue @since 4.0]]>
4017*dc5640d1SHerbert Xue    </doc>
4018*dc5640d1SHerbert Xue  </class>
4019*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Alias -->
4020*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.AliasCreator -->
4021*dc5640d1SHerbert Xue  <interface name="AliasCreator"    abstract="true"
4022*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4023*dc5640d1SHerbert Xue    deprecated="not deprecated">
4024*dc5640d1SHerbert Xue    <method name="createAliases" return="java.lang.Iterable&lt;com.google.inject.grapher.Alias&gt;"
4025*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4026*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4027*dc5640d1SHerbert Xue      deprecated="not deprecated">
4028*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4029*dc5640d1SHerbert Xue      <doc>
4030*dc5640d1SHerbert Xue      <![CDATA[Returns aliases for the given dependency graph. The aliases do not need to be transitively
4031*dc5640d1SHerbert Xue resolved, i.e. it is valid to return an alias (X to Y) and an alias (Y to Z). It is the
4032*dc5640d1SHerbert Xue responsibility of the caller to resolve this to (X to Z) and (Y to Z).
4033*dc5640d1SHerbert Xue
4034*dc5640d1SHerbert Xue @param bindings bindings that make up the dependency graph
4035*dc5640d1SHerbert Xue @return aliases that should be applied on the graph]]>
4036*dc5640d1SHerbert Xue      </doc>
4037*dc5640d1SHerbert Xue    </method>
4038*dc5640d1SHerbert Xue    <doc>
4039*dc5640d1SHerbert Xue    <![CDATA[Creator of node aliases. Used by dependency graphers to merge nodes in the internal Guice graph
4040*dc5640d1SHerbert Xue into a single node on the rendered graph.
4041*dc5640d1SHerbert Xue
4042*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4043*dc5640d1SHerbert Xue @since 4.0]]>
4044*dc5640d1SHerbert Xue    </doc>
4045*dc5640d1SHerbert Xue  </interface>
4046*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.AliasCreator -->
4047*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.BindingEdge -->
4048*dc5640d1SHerbert Xue  <class name="BindingEdge" extends="com.google.inject.grapher.Edge"
4049*dc5640d1SHerbert Xue    abstract="false"
4050*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4051*dc5640d1SHerbert Xue    deprecated="not deprecated">
4052*dc5640d1SHerbert Xue    <constructor name="BindingEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.grapher.BindingEdge.Type"
4053*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4054*dc5640d1SHerbert Xue      deprecated="not deprecated">
4055*dc5640d1SHerbert Xue    </constructor>
4056*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.grapher.BindingEdge.Type"
4057*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4058*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4059*dc5640d1SHerbert Xue      deprecated="not deprecated">
4060*dc5640d1SHerbert Xue    </method>
4061*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4062*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4063*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4064*dc5640d1SHerbert Xue      deprecated="not deprecated">
4065*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4066*dc5640d1SHerbert Xue    </method>
4067*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4068*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4069*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4070*dc5640d1SHerbert Xue      deprecated="not deprecated">
4071*dc5640d1SHerbert Xue    </method>
4072*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4073*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4074*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4075*dc5640d1SHerbert Xue      deprecated="not deprecated">
4076*dc5640d1SHerbert Xue    </method>
4077*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4078*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4079*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4080*dc5640d1SHerbert Xue      deprecated="not deprecated">
4081*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4082*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4083*dc5640d1SHerbert Xue    </method>
4084*dc5640d1SHerbert Xue    <doc>
4085*dc5640d1SHerbert Xue    <![CDATA[Edge that connects an interface to the type or instance that is bound to implement it.
4086*dc5640d1SHerbert Xue
4087*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4088*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4089*dc5640d1SHerbert Xue    </doc>
4090*dc5640d1SHerbert Xue  </class>
4091*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.BindingEdge -->
4092*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.BindingEdge.Type -->
4093*dc5640d1SHerbert Xue  <class name="BindingEdge.Type" extends="java.lang.Enum&lt;com.google.inject.grapher.BindingEdge.Type&gt;"
4094*dc5640d1SHerbert Xue    abstract="false"
4095*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
4096*dc5640d1SHerbert Xue    deprecated="not deprecated">
4097*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.BindingEdge.Type[]"
4098*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4099*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4100*dc5640d1SHerbert Xue      deprecated="not deprecated">
4101*dc5640d1SHerbert Xue    </method>
4102*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.BindingEdge.Type"
4103*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4104*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4105*dc5640d1SHerbert Xue      deprecated="not deprecated">
4106*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4107*dc5640d1SHerbert Xue    </method>
4108*dc5640d1SHerbert Xue    <doc>
4109*dc5640d1SHerbert Xue    <![CDATA[Classification for what kind of binding this edge represents.]]>
4110*dc5640d1SHerbert Xue    </doc>
4111*dc5640d1SHerbert Xue  </class>
4112*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.BindingEdge.Type -->
4113*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.DefaultRootKeySetCreator -->
4114*dc5640d1SHerbert Xue  <class name="DefaultRootKeySetCreator" extends="java.lang.Object"
4115*dc5640d1SHerbert Xue    abstract="false"
4116*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4117*dc5640d1SHerbert Xue    deprecated="not deprecated">
4118*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.RootKeySetCreator"/>
4119*dc5640d1SHerbert Xue    <constructor name="DefaultRootKeySetCreator"
4120*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4121*dc5640d1SHerbert Xue      deprecated="not deprecated">
4122*dc5640d1SHerbert Xue    </constructor>
4123*dc5640d1SHerbert Xue    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4124*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4125*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4126*dc5640d1SHerbert Xue      deprecated="not deprecated">
4127*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4128*dc5640d1SHerbert Xue    </method>
4129*dc5640d1SHerbert Xue    <doc>
4130*dc5640d1SHerbert Xue    <![CDATA[Root key set creator that starts with all types that are not Guice internal types or the
4131*dc5640d1SHerbert Xue {@link Logger} type.
4132*dc5640d1SHerbert Xue
4133*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4134*dc5640d1SHerbert Xue @since 4.0]]>
4135*dc5640d1SHerbert Xue    </doc>
4136*dc5640d1SHerbert Xue  </class>
4137*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.DefaultRootKeySetCreator -->
4138*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.DependencyEdge -->
4139*dc5640d1SHerbert Xue  <class name="DependencyEdge" extends="com.google.inject.grapher.Edge"
4140*dc5640d1SHerbert Xue    abstract="false"
4141*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4142*dc5640d1SHerbert Xue    deprecated="not deprecated">
4143*dc5640d1SHerbert Xue    <constructor name="DependencyEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId, com.google.inject.spi.InjectionPoint"
4144*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4145*dc5640d1SHerbert Xue      deprecated="not deprecated">
4146*dc5640d1SHerbert Xue    </constructor>
4147*dc5640d1SHerbert Xue    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
4148*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4149*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4150*dc5640d1SHerbert Xue      deprecated="not deprecated">
4151*dc5640d1SHerbert Xue    </method>
4152*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4153*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4154*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4155*dc5640d1SHerbert Xue      deprecated="not deprecated">
4156*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4157*dc5640d1SHerbert Xue    </method>
4158*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4159*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4160*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4161*dc5640d1SHerbert Xue      deprecated="not deprecated">
4162*dc5640d1SHerbert Xue    </method>
4163*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4164*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4165*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4166*dc5640d1SHerbert Xue      deprecated="not deprecated">
4167*dc5640d1SHerbert Xue    </method>
4168*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4169*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4170*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4171*dc5640d1SHerbert Xue      deprecated="not deprecated">
4172*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4173*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4174*dc5640d1SHerbert Xue    </method>
4175*dc5640d1SHerbert Xue    <doc>
4176*dc5640d1SHerbert Xue    <![CDATA[Edge from a class or {@link InjectionPoint} to the interface node that will satisfy the
4177*dc5640d1SHerbert Xue dependency.
4178*dc5640d1SHerbert Xue
4179*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4180*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4181*dc5640d1SHerbert Xue    </doc>
4182*dc5640d1SHerbert Xue  </class>
4183*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.DependencyEdge -->
4184*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Edge -->
4185*dc5640d1SHerbert Xue  <class name="Edge" extends="java.lang.Object"
4186*dc5640d1SHerbert Xue    abstract="true"
4187*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4188*dc5640d1SHerbert Xue    deprecated="not deprecated">
4189*dc5640d1SHerbert Xue    <constructor name="Edge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4190*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4191*dc5640d1SHerbert Xue      deprecated="not deprecated">
4192*dc5640d1SHerbert Xue    </constructor>
4193*dc5640d1SHerbert Xue    <method name="getFromId" return="com.google.inject.grapher.NodeId"
4194*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4195*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4196*dc5640d1SHerbert Xue      deprecated="not deprecated">
4197*dc5640d1SHerbert Xue    </method>
4198*dc5640d1SHerbert Xue    <method name="getToId" return="com.google.inject.grapher.NodeId"
4199*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4200*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4201*dc5640d1SHerbert Xue      deprecated="not deprecated">
4202*dc5640d1SHerbert Xue    </method>
4203*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4204*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4205*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4206*dc5640d1SHerbert Xue      deprecated="not deprecated">
4207*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4208*dc5640d1SHerbert Xue    </method>
4209*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4210*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4211*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4212*dc5640d1SHerbert Xue      deprecated="not deprecated">
4213*dc5640d1SHerbert Xue    </method>
4214*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Edge"
4215*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4216*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4217*dc5640d1SHerbert Xue      deprecated="not deprecated">
4218*dc5640d1SHerbert Xue      <param name="fromId" type="com.google.inject.grapher.NodeId"/>
4219*dc5640d1SHerbert Xue      <param name="toId" type="com.google.inject.grapher.NodeId"/>
4220*dc5640d1SHerbert Xue      <doc>
4221*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of the edge with new node IDs.
4222*dc5640d1SHerbert Xue
4223*dc5640d1SHerbert Xue @param fromId new ID of the 'from' node
4224*dc5640d1SHerbert Xue @param toId new ID of the 'to' node
4225*dc5640d1SHerbert Xue @return copy of the edge with the new node IDs]]>
4226*dc5640d1SHerbert Xue      </doc>
4227*dc5640d1SHerbert Xue    </method>
4228*dc5640d1SHerbert Xue    <doc>
4229*dc5640d1SHerbert Xue    <![CDATA[Edge in a guice dependency graph.
4230*dc5640d1SHerbert Xue
4231*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4232*dc5640d1SHerbert Xue @since 4.0]]>
4233*dc5640d1SHerbert Xue    </doc>
4234*dc5640d1SHerbert Xue  </class>
4235*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Edge -->
4236*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.EdgeCreator -->
4237*dc5640d1SHerbert Xue  <interface name="EdgeCreator"    abstract="true"
4238*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4239*dc5640d1SHerbert Xue    deprecated="not deprecated">
4240*dc5640d1SHerbert Xue    <method name="getEdges" return="java.lang.Iterable&lt;com.google.inject.grapher.Edge&gt;"
4241*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4242*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4243*dc5640d1SHerbert Xue      deprecated="not deprecated">
4244*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4245*dc5640d1SHerbert Xue      <doc>
4246*dc5640d1SHerbert Xue      <![CDATA[Returns edges for the given dependency graph.]]>
4247*dc5640d1SHerbert Xue      </doc>
4248*dc5640d1SHerbert Xue    </method>
4249*dc5640d1SHerbert Xue    <doc>
4250*dc5640d1SHerbert Xue    <![CDATA[Creator of graph edges to render. All edges will be rendered on the graph after node aliasing is
4251*dc5640d1SHerbert Xue performed.
4252*dc5640d1SHerbert Xue
4253*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4254*dc5640d1SHerbert Xue @since 4.0]]>
4255*dc5640d1SHerbert Xue    </doc>
4256*dc5640d1SHerbert Xue  </interface>
4257*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.EdgeCreator -->
4258*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.ImplementationNode -->
4259*dc5640d1SHerbert Xue  <class name="ImplementationNode" extends="com.google.inject.grapher.Node"
4260*dc5640d1SHerbert Xue    abstract="false"
4261*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4262*dc5640d1SHerbert Xue    deprecated="not deprecated">
4263*dc5640d1SHerbert Xue    <constructor name="ImplementationNode" type="com.google.inject.grapher.NodeId, java.lang.Object, java.util.Collection&lt;java.lang.reflect.Member&gt;"
4264*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4265*dc5640d1SHerbert Xue      deprecated="not deprecated">
4266*dc5640d1SHerbert Xue    </constructor>
4267*dc5640d1SHerbert Xue    <method name="getMembers" return="java.util.Collection&lt;java.lang.reflect.Member&gt;"
4268*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4269*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4270*dc5640d1SHerbert Xue      deprecated="not deprecated">
4271*dc5640d1SHerbert Xue    </method>
4272*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4273*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4274*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4275*dc5640d1SHerbert Xue      deprecated="not deprecated">
4276*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4277*dc5640d1SHerbert Xue    </method>
4278*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4279*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4280*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4281*dc5640d1SHerbert Xue      deprecated="not deprecated">
4282*dc5640d1SHerbert Xue    </method>
4283*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4284*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4285*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4286*dc5640d1SHerbert Xue      deprecated="not deprecated">
4287*dc5640d1SHerbert Xue    </method>
4288*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4289*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4290*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4291*dc5640d1SHerbert Xue      deprecated="not deprecated">
4292*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4293*dc5640d1SHerbert Xue    </method>
4294*dc5640d1SHerbert Xue    <doc>
4295*dc5640d1SHerbert Xue    <![CDATA[Node for types that have {@link com.google.inject.spi.Dependency}s and are
4296*dc5640d1SHerbert Xue bound to {@link InterfaceNode}s. These nodes will often have fields for
4297*dc5640d1SHerbert Xue {@link Member}s that are {@link com.google.inject.spi.InjectionPoint}s.
4298*dc5640d1SHerbert Xue
4299*dc5640d1SHerbert Xue @see DependencyEdge
4300*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4301*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4302*dc5640d1SHerbert Xue    </doc>
4303*dc5640d1SHerbert Xue  </class>
4304*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.ImplementationNode -->
4305*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.InjectorGrapher -->
4306*dc5640d1SHerbert Xue  <interface name="InjectorGrapher"    abstract="true"
4307*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4308*dc5640d1SHerbert Xue    deprecated="not deprecated">
4309*dc5640d1SHerbert Xue    <method name="graph"
4310*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4311*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4312*dc5640d1SHerbert Xue      deprecated="not deprecated">
4313*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4314*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4315*dc5640d1SHerbert Xue      <doc>
4316*dc5640d1SHerbert Xue      <![CDATA[Graphs the guice dependency graph for the given injector using default starting keys.]]>
4317*dc5640d1SHerbert Xue      </doc>
4318*dc5640d1SHerbert Xue    </method>
4319*dc5640d1SHerbert Xue    <method name="graph"
4320*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4321*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4322*dc5640d1SHerbert Xue      deprecated="not deprecated">
4323*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4324*dc5640d1SHerbert Xue      <param name="root" type="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"/>
4325*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
4326*dc5640d1SHerbert Xue      <doc>
4327*dc5640d1SHerbert Xue      <![CDATA[Graphs the guice dependency graph for the given injector using the given starting keys and
4328*dc5640d1SHerbert Xue their transitive dependencies.]]>
4329*dc5640d1SHerbert Xue      </doc>
4330*dc5640d1SHerbert Xue    </method>
4331*dc5640d1SHerbert Xue    <doc>
4332*dc5640d1SHerbert Xue    <![CDATA[Guice injector grapher. Renders the guice dependency graph for an injector. It can render the
4333*dc5640d1SHerbert Xue whole dependency graph or just transitive dependencies of a given set of nodes.
4334*dc5640d1SHerbert Xue
4335*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4336*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as a concrete class with a different API)]]>
4337*dc5640d1SHerbert Xue    </doc>
4338*dc5640d1SHerbert Xue  </interface>
4339*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.InjectorGrapher -->
4340*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.InstanceNode -->
4341*dc5640d1SHerbert Xue  <class name="InstanceNode" extends="com.google.inject.grapher.Node"
4342*dc5640d1SHerbert Xue    abstract="false"
4343*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4344*dc5640d1SHerbert Xue    deprecated="not deprecated">
4345*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;"
4346*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4347*dc5640d1SHerbert Xue      deprecated="not deprecated">
4348*dc5640d1SHerbert Xue    </constructor>
4349*dc5640d1SHerbert Xue    <method name="getInstance" return="java.lang.Object"
4350*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4351*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4352*dc5640d1SHerbert Xue      deprecated="not deprecated">
4353*dc5640d1SHerbert Xue    </method>
4354*dc5640d1SHerbert Xue    <method name="getMembers" return="java.lang.Iterable&lt;java.lang.reflect.Member&gt;"
4355*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4356*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4357*dc5640d1SHerbert Xue      deprecated="not deprecated">
4358*dc5640d1SHerbert Xue    </method>
4359*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4360*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4361*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4362*dc5640d1SHerbert Xue      deprecated="not deprecated">
4363*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4364*dc5640d1SHerbert Xue    </method>
4365*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4366*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4367*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4368*dc5640d1SHerbert Xue      deprecated="not deprecated">
4369*dc5640d1SHerbert Xue    </method>
4370*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4371*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4373*dc5640d1SHerbert Xue      deprecated="not deprecated">
4374*dc5640d1SHerbert Xue    </method>
4375*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4376*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4377*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4378*dc5640d1SHerbert Xue      deprecated="not deprecated">
4379*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4380*dc5640d1SHerbert Xue    </method>
4381*dc5640d1SHerbert Xue    <doc>
4382*dc5640d1SHerbert Xue    <![CDATA[Node for instances. Used when a type is bound to an instance.
4383*dc5640d1SHerbert Xue
4384*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4385*dc5640d1SHerbert Xue @since 4.0]]>
4386*dc5640d1SHerbert Xue    </doc>
4387*dc5640d1SHerbert Xue  </class>
4388*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.InstanceNode -->
4389*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.InterfaceNode -->
4390*dc5640d1SHerbert Xue  <class name="InterfaceNode" extends="com.google.inject.grapher.Node"
4391*dc5640d1SHerbert Xue    abstract="false"
4392*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4393*dc5640d1SHerbert Xue    deprecated="not deprecated">
4394*dc5640d1SHerbert Xue    <constructor name="InterfaceNode" type="com.google.inject.grapher.NodeId, java.lang.Object"
4395*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4396*dc5640d1SHerbert Xue      deprecated="not deprecated">
4397*dc5640d1SHerbert Xue    </constructor>
4398*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4399*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4400*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4401*dc5640d1SHerbert Xue      deprecated="not deprecated">
4402*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4403*dc5640d1SHerbert Xue    </method>
4404*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4405*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4406*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4407*dc5640d1SHerbert Xue      deprecated="not deprecated">
4408*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4409*dc5640d1SHerbert Xue    </method>
4410*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4411*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4412*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4413*dc5640d1SHerbert Xue      deprecated="not deprecated">
4414*dc5640d1SHerbert Xue    </method>
4415*dc5640d1SHerbert Xue    <doc>
4416*dc5640d1SHerbert Xue    <![CDATA[Node for an interface type that has been bound to an implementation class or instance.
4417*dc5640d1SHerbert Xue
4418*dc5640d1SHerbert Xue @see BindingEdge
4419*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
4420*dc5640d1SHerbert Xue @since 4.0 (since 2.0 as an interface)]]>
4421*dc5640d1SHerbert Xue    </doc>
4422*dc5640d1SHerbert Xue  </class>
4423*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.InterfaceNode -->
4424*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NameFactory -->
4425*dc5640d1SHerbert Xue  <interface name="NameFactory"    abstract="true"
4426*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4427*dc5640d1SHerbert Xue    deprecated="not deprecated">
4428*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4429*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4430*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4431*dc5640d1SHerbert Xue      deprecated="not deprecated">
4432*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4433*dc5640d1SHerbert Xue    </method>
4434*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4435*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4436*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4437*dc5640d1SHerbert Xue      deprecated="not deprecated">
4438*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4439*dc5640d1SHerbert Xue    </method>
4440*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4441*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4442*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4443*dc5640d1SHerbert Xue      deprecated="not deprecated">
4444*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4445*dc5640d1SHerbert Xue    </method>
4446*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4447*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4448*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4449*dc5640d1SHerbert Xue      deprecated="not deprecated">
4450*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4451*dc5640d1SHerbert Xue    </method>
4452*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4453*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4454*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4455*dc5640d1SHerbert Xue      deprecated="not deprecated">
4456*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4457*dc5640d1SHerbert Xue    </method>
4458*dc5640d1SHerbert Xue    <doc>
4459*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that provides nice {@link String}s that we can
4460*dc5640d1SHerbert Xue display in the graph for the types that come up in
4461*dc5640d1SHerbert Xue {@link com.google.inject.Binding}s.
4462*dc5640d1SHerbert Xue
4463*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4464*dc5640d1SHerbert Xue    </doc>
4465*dc5640d1SHerbert Xue  </interface>
4466*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NameFactory -->
4467*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.Node -->
4468*dc5640d1SHerbert Xue  <class name="Node" extends="java.lang.Object"
4469*dc5640d1SHerbert Xue    abstract="true"
4470*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4471*dc5640d1SHerbert Xue    deprecated="not deprecated">
4472*dc5640d1SHerbert Xue    <constructor name="Node" type="com.google.inject.grapher.NodeId, java.lang.Object"
4473*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4474*dc5640d1SHerbert Xue      deprecated="not deprecated">
4475*dc5640d1SHerbert Xue    </constructor>
4476*dc5640d1SHerbert Xue    <method name="getId" return="com.google.inject.grapher.NodeId"
4477*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4478*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4479*dc5640d1SHerbert Xue      deprecated="not deprecated">
4480*dc5640d1SHerbert Xue    </method>
4481*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
4482*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4483*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4484*dc5640d1SHerbert Xue      deprecated="not deprecated">
4485*dc5640d1SHerbert Xue    </method>
4486*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4487*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4488*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4489*dc5640d1SHerbert Xue      deprecated="not deprecated">
4490*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4491*dc5640d1SHerbert Xue    </method>
4492*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4493*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4494*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4495*dc5640d1SHerbert Xue      deprecated="not deprecated">
4496*dc5640d1SHerbert Xue    </method>
4497*dc5640d1SHerbert Xue    <method name="copy" return="com.google.inject.grapher.Node"
4498*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4499*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4500*dc5640d1SHerbert Xue      deprecated="not deprecated">
4501*dc5640d1SHerbert Xue      <param name="id" type="com.google.inject.grapher.NodeId"/>
4502*dc5640d1SHerbert Xue      <doc>
4503*dc5640d1SHerbert Xue      <![CDATA[Returns a copy of the node with a new ID.
4504*dc5640d1SHerbert Xue
4505*dc5640d1SHerbert Xue @param id new ID of the node
4506*dc5640d1SHerbert Xue @return copy of the node with a new ID]]>
4507*dc5640d1SHerbert Xue      </doc>
4508*dc5640d1SHerbert Xue    </method>
4509*dc5640d1SHerbert Xue    <doc>
4510*dc5640d1SHerbert Xue    <![CDATA[Node in a guice dependency graph.
4511*dc5640d1SHerbert Xue
4512*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4513*dc5640d1SHerbert Xue @since 4.0]]>
4514*dc5640d1SHerbert Xue    </doc>
4515*dc5640d1SHerbert Xue  </class>
4516*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.Node -->
4517*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.NodeCreator -->
4518*dc5640d1SHerbert Xue  <interface name="NodeCreator"    abstract="true"
4519*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4520*dc5640d1SHerbert Xue    deprecated="not deprecated">
4521*dc5640d1SHerbert Xue    <method name="getNodes" return="java.lang.Iterable&lt;com.google.inject.grapher.Node&gt;"
4522*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4523*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4524*dc5640d1SHerbert Xue      deprecated="not deprecated">
4525*dc5640d1SHerbert Xue      <param name="bindings" type="java.lang.Iterable&lt;com.google.inject.Binding&lt;?&gt;&gt;"/>
4526*dc5640d1SHerbert Xue      <doc>
4527*dc5640d1SHerbert Xue      <![CDATA[Returns nodes for the given dependency graph.]]>
4528*dc5640d1SHerbert Xue      </doc>
4529*dc5640d1SHerbert Xue    </method>
4530*dc5640d1SHerbert Xue    <doc>
4531*dc5640d1SHerbert Xue    <![CDATA[Creator of graph nodes.
4532*dc5640d1SHerbert Xue
4533*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4534*dc5640d1SHerbert Xue @since 4.0]]>
4535*dc5640d1SHerbert Xue    </doc>
4536*dc5640d1SHerbert Xue  </interface>
4537*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.NodeCreator -->
4538*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.NodeId -->
4539*dc5640d1SHerbert Xue  <class name="NodeId" extends="java.lang.Object"
4540*dc5640d1SHerbert Xue    abstract="false"
4541*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4542*dc5640d1SHerbert Xue    deprecated="not deprecated">
4543*dc5640d1SHerbert Xue    <method name="newTypeId" return="com.google.inject.grapher.NodeId"
4544*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4545*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4546*dc5640d1SHerbert Xue      deprecated="not deprecated">
4547*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4548*dc5640d1SHerbert Xue    </method>
4549*dc5640d1SHerbert Xue    <method name="newInstanceId" return="com.google.inject.grapher.NodeId"
4550*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4551*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4552*dc5640d1SHerbert Xue      deprecated="not deprecated">
4553*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4554*dc5640d1SHerbert Xue    </method>
4555*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;?&gt;"
4556*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4557*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4558*dc5640d1SHerbert Xue      deprecated="not deprecated">
4559*dc5640d1SHerbert Xue    </method>
4560*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
4561*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4562*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4563*dc5640d1SHerbert Xue      deprecated="not deprecated">
4564*dc5640d1SHerbert Xue    </method>
4565*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
4566*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4567*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4568*dc5640d1SHerbert Xue      deprecated="not deprecated">
4569*dc5640d1SHerbert Xue      <param name="obj" type="java.lang.Object"/>
4570*dc5640d1SHerbert Xue    </method>
4571*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4572*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4573*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4574*dc5640d1SHerbert Xue      deprecated="not deprecated">
4575*dc5640d1SHerbert Xue    </method>
4576*dc5640d1SHerbert Xue    <doc>
4577*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
4578*dc5640d1SHerbert Xue distinguish instances and implementation classes for the same key. For example
4579*dc5640d1SHerbert Xue {@code bind(Integer.class).toInstance(42)} produces two nodes: an
4580*dc5640d1SHerbert Xue interface node with the key of {@code Key<Integer>} and an instance node with the same
4581*dc5640d1SHerbert Xue {@link Key} and value of 42.
4582*dc5640d1SHerbert Xue
4583*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4584*dc5640d1SHerbert Xue @since 4.0]]>
4585*dc5640d1SHerbert Xue    </doc>
4586*dc5640d1SHerbert Xue  </class>
4587*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.NodeId -->
4588*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.NodeId.NodeType -->
4589*dc5640d1SHerbert Xue  <class name="NodeId.NodeType" extends="java.lang.Enum&lt;com.google.inject.grapher.NodeId.NodeType&gt;"
4590*dc5640d1SHerbert Xue    abstract="false"
4591*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
4592*dc5640d1SHerbert Xue    deprecated="not deprecated">
4593*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.NodeId.NodeType[]"
4594*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4595*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4596*dc5640d1SHerbert Xue      deprecated="not deprecated">
4597*dc5640d1SHerbert Xue    </method>
4598*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.NodeId.NodeType"
4599*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4600*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4601*dc5640d1SHerbert Xue      deprecated="not deprecated">
4602*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4603*dc5640d1SHerbert Xue    </method>
4604*dc5640d1SHerbert Xue    <doc>
4605*dc5640d1SHerbert Xue    <![CDATA[Type of node.
4606*dc5640d1SHerbert Xue
4607*dc5640d1SHerbert Xue @since 4.0]]>
4608*dc5640d1SHerbert Xue    </doc>
4609*dc5640d1SHerbert Xue  </class>
4610*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.NodeId.NodeType -->
4611*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.RootKeySetCreator -->
4612*dc5640d1SHerbert Xue  <interface name="RootKeySetCreator"    abstract="true"
4613*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4614*dc5640d1SHerbert Xue    deprecated="not deprecated">
4615*dc5640d1SHerbert Xue    <method name="getRootKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
4616*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
4617*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4618*dc5640d1SHerbert Xue      deprecated="not deprecated">
4619*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
4620*dc5640d1SHerbert Xue      <doc>
4621*dc5640d1SHerbert Xue      <![CDATA[Returns the set of starting keys to graph.]]>
4622*dc5640d1SHerbert Xue      </doc>
4623*dc5640d1SHerbert Xue    </method>
4624*dc5640d1SHerbert Xue    <doc>
4625*dc5640d1SHerbert Xue    <![CDATA[Creator of the default starting set of keys to graph. These keys and their transitive
4626*dc5640d1SHerbert Xue dependencies will be graphed.
4627*dc5640d1SHerbert Xue
4628*dc5640d1SHerbert Xue @author [email protected] (Bojan Djordjevic)
4629*dc5640d1SHerbert Xue @since 4.0]]>
4630*dc5640d1SHerbert Xue    </doc>
4631*dc5640d1SHerbert Xue  </interface>
4632*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.RootKeySetCreator -->
4633*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.ShortNameFactory -->
4634*dc5640d1SHerbert Xue  <class name="ShortNameFactory" extends="java.lang.Object"
4635*dc5640d1SHerbert Xue    abstract="false"
4636*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4637*dc5640d1SHerbert Xue    deprecated="not deprecated">
4638*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.NameFactory"/>
4639*dc5640d1SHerbert Xue    <constructor name="ShortNameFactory"
4640*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4641*dc5640d1SHerbert Xue      deprecated="not deprecated">
4642*dc5640d1SHerbert Xue    </constructor>
4643*dc5640d1SHerbert Xue    <method name="getMemberName" return="java.lang.String"
4644*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4645*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4646*dc5640d1SHerbert Xue      deprecated="not deprecated">
4647*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
4648*dc5640d1SHerbert Xue    </method>
4649*dc5640d1SHerbert Xue    <method name="getAnnotationName" return="java.lang.String"
4650*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4651*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4652*dc5640d1SHerbert Xue      deprecated="not deprecated">
4653*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4654*dc5640d1SHerbert Xue    </method>
4655*dc5640d1SHerbert Xue    <method name="getClassName" return="java.lang.String"
4656*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4657*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4658*dc5640d1SHerbert Xue      deprecated="not deprecated">
4659*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
4660*dc5640d1SHerbert Xue    </method>
4661*dc5640d1SHerbert Xue    <method name="getInstanceName" return="java.lang.String"
4662*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4663*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4664*dc5640d1SHerbert Xue      deprecated="not deprecated">
4665*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
4666*dc5640d1SHerbert Xue    </method>
4667*dc5640d1SHerbert Xue    <method name="getSourceName" return="java.lang.String"
4668*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4669*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4670*dc5640d1SHerbert Xue      deprecated="not deprecated">
4671*dc5640d1SHerbert Xue      <param name="source" type="java.lang.Object"/>
4672*dc5640d1SHerbert Xue      <doc>
4673*dc5640d1SHerbert Xue      <![CDATA[Returns a name for a Guice "source" object. This will typically be either
4674*dc5640d1SHerbert Xue a {@link StackTraceElement} for when the binding is made to the instance,
4675*dc5640d1SHerbert Xue or a {@link Method} when a provider method is used.]]>
4676*dc5640d1SHerbert Xue      </doc>
4677*dc5640d1SHerbert Xue    </method>
4678*dc5640d1SHerbert Xue    <method name="getFileString" return="java.lang.String"
4679*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4680*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4681*dc5640d1SHerbert Xue      deprecated="not deprecated">
4682*dc5640d1SHerbert Xue      <param name="stackTraceElement" type="java.lang.StackTraceElement"/>
4683*dc5640d1SHerbert Xue    </method>
4684*dc5640d1SHerbert Xue    <method name="getMethodString" return="java.lang.String"
4685*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4686*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4687*dc5640d1SHerbert Xue      deprecated="not deprecated">
4688*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
4689*dc5640d1SHerbert Xue    </method>
4690*dc5640d1SHerbert Xue    <doc>
4691*dc5640d1SHerbert Xue    <![CDATA[Reasonable implementation for {@link NameFactory}. Mostly takes various
4692*dc5640d1SHerbert Xue {@link Object#toString()}s and strips package names out of them so that
4693*dc5640d1SHerbert Xue they'll fit on the graph.
4694*dc5640d1SHerbert Xue
4695*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4696*dc5640d1SHerbert Xue    </doc>
4697*dc5640d1SHerbert Xue  </class>
4698*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.ShortNameFactory -->
4699*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.TransitiveDependencyVisitor -->
4700*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;"
4701*dc5640d1SHerbert Xue    abstract="false"
4702*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4703*dc5640d1SHerbert Xue    deprecated="not deprecated">
4704*dc5640d1SHerbert Xue    <constructor name="TransitiveDependencyVisitor"
4705*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4706*dc5640d1SHerbert Xue      deprecated="not deprecated">
4707*dc5640d1SHerbert Xue    </constructor>
4708*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4709*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4710*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4711*dc5640d1SHerbert Xue      deprecated="not deprecated">
4712*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;?&gt;"/>
4713*dc5640d1SHerbert Xue    </method>
4714*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4715*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4716*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4717*dc5640d1SHerbert Xue      deprecated="not deprecated">
4718*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;?&gt;"/>
4719*dc5640d1SHerbert Xue    </method>
4720*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4721*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4722*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4723*dc5640d1SHerbert Xue      deprecated="not deprecated">
4724*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;?&gt;"/>
4725*dc5640d1SHerbert Xue    </method>
4726*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4727*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4728*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4729*dc5640d1SHerbert Xue      deprecated="not deprecated">
4730*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;?&gt;"/>
4731*dc5640d1SHerbert Xue    </method>
4732*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4733*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4734*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4735*dc5640d1SHerbert Xue      deprecated="not deprecated">
4736*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;?&gt;"/>
4737*dc5640d1SHerbert Xue    </method>
4738*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4739*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4740*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4741*dc5640d1SHerbert Xue      deprecated="not deprecated">
4742*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;?&gt;"/>
4743*dc5640d1SHerbert Xue    </method>
4744*dc5640d1SHerbert Xue    <method name="visit" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4745*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4746*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4747*dc5640d1SHerbert Xue      deprecated="not deprecated">
4748*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;?&gt;"/>
4749*dc5640d1SHerbert Xue    </method>
4750*dc5640d1SHerbert Xue    <method name="visitOther" return="java.util.Collection&lt;com.google.inject.Key&lt;?&gt;&gt;"
4751*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4752*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4753*dc5640d1SHerbert Xue      deprecated="not deprecated">
4754*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
4755*dc5640d1SHerbert Xue      <doc>
4756*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4757*dc5640d1SHerbert Xue      </doc>
4758*dc5640d1SHerbert Xue    </method>
4759*dc5640d1SHerbert Xue    <doc>
4760*dc5640d1SHerbert Xue    <![CDATA[{@link com.google.inject.spi.BindingTargetVisitor} that returns a
4761*dc5640d1SHerbert Xue {@link Collection} of the {@link Key}s of each {@link Binding}'s
4762*dc5640d1SHerbert Xue dependencies. Used by {@link InjectorGrapher} to walk the dependency graph
4763*dc5640d1SHerbert Xue from a starting set of {@link Binding}s.
4764*dc5640d1SHerbert Xue
4765*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4766*dc5640d1SHerbert Xue    </doc>
4767*dc5640d1SHerbert Xue  </class>
4768*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.TransitiveDependencyVisitor -->
4769*dc5640d1SHerbert Xue</package>
4770*dc5640d1SHerbert Xue<package name="com.google.inject.grapher.graphviz">
4771*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.ArrowType -->
4772*dc5640d1SHerbert Xue  <class name="ArrowType" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4773*dc5640d1SHerbert Xue    abstract="false"
4774*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4775*dc5640d1SHerbert Xue    deprecated="not deprecated">
4776*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.ArrowType[]"
4777*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4778*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4779*dc5640d1SHerbert Xue      deprecated="not deprecated">
4780*dc5640d1SHerbert Xue    </method>
4781*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.ArrowType"
4782*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4783*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4784*dc5640d1SHerbert Xue      deprecated="not deprecated">
4785*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4786*dc5640d1SHerbert Xue    </method>
4787*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4788*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4789*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4790*dc5640d1SHerbert Xue      deprecated="not deprecated">
4791*dc5640d1SHerbert Xue    </method>
4792*dc5640d1SHerbert Xue    <doc>
4793*dc5640d1SHerbert Xue    <![CDATA[Arrow symbols that are available from Graphviz. These can be composed by
4794*dc5640d1SHerbert Xue concatenation to make double arrows and such.
4795*dc5640d1SHerbert Xue <p>
4796*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/arrows.html
4797*dc5640d1SHerbert Xue
4798*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4799*dc5640d1SHerbert Xue    </doc>
4800*dc5640d1SHerbert Xue  </class>
4801*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.ArrowType -->
4802*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.CompassPoint -->
4803*dc5640d1SHerbert Xue  <class name="CompassPoint" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.CompassPoint&gt;"
4804*dc5640d1SHerbert Xue    abstract="false"
4805*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4806*dc5640d1SHerbert Xue    deprecated="not deprecated">
4807*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.CompassPoint[]"
4808*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4809*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4810*dc5640d1SHerbert Xue      deprecated="not deprecated">
4811*dc5640d1SHerbert Xue    </method>
4812*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.CompassPoint"
4813*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4814*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4815*dc5640d1SHerbert Xue      deprecated="not deprecated">
4816*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4817*dc5640d1SHerbert Xue    </method>
4818*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4819*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4820*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4821*dc5640d1SHerbert Xue      deprecated="not deprecated">
4822*dc5640d1SHerbert Xue    </method>
4823*dc5640d1SHerbert Xue    <doc>
4824*dc5640d1SHerbert Xue    <![CDATA[Enum for the "compass point" values used to control where edge
4825*dc5640d1SHerbert Xue end points appear on the graph.
4826*dc5640d1SHerbert Xue <p>
4827*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:portPos
4828*dc5640d1SHerbert Xue
4829*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4830*dc5640d1SHerbert Xue    </doc>
4831*dc5640d1SHerbert Xue  </class>
4832*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.CompassPoint -->
4833*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.EdgeStyle -->
4834*dc5640d1SHerbert Xue  <class name="EdgeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.EdgeStyle&gt;"
4835*dc5640d1SHerbert Xue    abstract="false"
4836*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
4837*dc5640d1SHerbert Xue    deprecated="not deprecated">
4838*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.EdgeStyle[]"
4839*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4840*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4841*dc5640d1SHerbert Xue      deprecated="not deprecated">
4842*dc5640d1SHerbert Xue    </method>
4843*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.EdgeStyle"
4844*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4845*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
4846*dc5640d1SHerbert Xue      deprecated="not deprecated">
4847*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
4848*dc5640d1SHerbert Xue    </method>
4849*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
4850*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4851*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4852*dc5640d1SHerbert Xue      deprecated="not deprecated">
4853*dc5640d1SHerbert Xue    </method>
4854*dc5640d1SHerbert Xue    <doc>
4855*dc5640d1SHerbert Xue    <![CDATA[Styles for edges.
4856*dc5640d1SHerbert Xue <p>
4857*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
4858*dc5640d1SHerbert Xue
4859*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4860*dc5640d1SHerbert Xue    </doc>
4861*dc5640d1SHerbert Xue  </class>
4862*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.EdgeStyle -->
4863*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizEdge -->
4864*dc5640d1SHerbert Xue  <class name="GraphvizEdge" extends="java.lang.Object"
4865*dc5640d1SHerbert Xue    abstract="false"
4866*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4867*dc5640d1SHerbert Xue    deprecated="not deprecated">
4868*dc5640d1SHerbert Xue    <constructor name="GraphvizEdge" type="com.google.inject.grapher.NodeId, com.google.inject.grapher.NodeId"
4869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4870*dc5640d1SHerbert Xue      deprecated="not deprecated">
4871*dc5640d1SHerbert Xue    </constructor>
4872*dc5640d1SHerbert Xue    <method name="getHeadNodeId" return="com.google.inject.grapher.NodeId"
4873*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4874*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4875*dc5640d1SHerbert Xue      deprecated="not deprecated">
4876*dc5640d1SHerbert Xue      <doc>
4877*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4878*dc5640d1SHerbert Xue      </doc>
4879*dc5640d1SHerbert Xue    </method>
4880*dc5640d1SHerbert Xue    <method name="getHeadPortId" return="java.lang.String"
4881*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4882*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4883*dc5640d1SHerbert Xue      deprecated="not deprecated">
4884*dc5640d1SHerbert Xue    </method>
4885*dc5640d1SHerbert Xue    <method name="setHeadPortId"
4886*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4887*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4888*dc5640d1SHerbert Xue      deprecated="not deprecated">
4889*dc5640d1SHerbert Xue      <param name="headPortId" type="java.lang.String"/>
4890*dc5640d1SHerbert Xue    </method>
4891*dc5640d1SHerbert Xue    <method name="getHeadCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4892*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4893*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4894*dc5640d1SHerbert Xue      deprecated="not deprecated">
4895*dc5640d1SHerbert Xue    </method>
4896*dc5640d1SHerbert Xue    <method name="setHeadCompassPoint"
4897*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4898*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4899*dc5640d1SHerbert Xue      deprecated="not deprecated">
4900*dc5640d1SHerbert Xue      <param name="headCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4901*dc5640d1SHerbert Xue    </method>
4902*dc5640d1SHerbert Xue    <method name="getArrowHead" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4903*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4904*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4905*dc5640d1SHerbert Xue      deprecated="not deprecated">
4906*dc5640d1SHerbert Xue    </method>
4907*dc5640d1SHerbert Xue    <method name="setArrowHead"
4908*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4909*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4910*dc5640d1SHerbert Xue      deprecated="not deprecated">
4911*dc5640d1SHerbert Xue      <param name="arrowHead" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4912*dc5640d1SHerbert Xue    </method>
4913*dc5640d1SHerbert Xue    <method name="getTailNodeId" return="com.google.inject.grapher.NodeId"
4914*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4915*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4916*dc5640d1SHerbert Xue      deprecated="not deprecated">
4917*dc5640d1SHerbert Xue      <doc>
4918*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
4919*dc5640d1SHerbert Xue      </doc>
4920*dc5640d1SHerbert Xue    </method>
4921*dc5640d1SHerbert Xue    <method name="getTailPortId" return="java.lang.String"
4922*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4923*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4924*dc5640d1SHerbert Xue      deprecated="not deprecated">
4925*dc5640d1SHerbert Xue    </method>
4926*dc5640d1SHerbert Xue    <method name="setTailPortId"
4927*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4928*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4929*dc5640d1SHerbert Xue      deprecated="not deprecated">
4930*dc5640d1SHerbert Xue      <param name="tailPortId" type="java.lang.String"/>
4931*dc5640d1SHerbert Xue    </method>
4932*dc5640d1SHerbert Xue    <method name="getTailCompassPoint" return="com.google.inject.grapher.graphviz.CompassPoint"
4933*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4934*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4935*dc5640d1SHerbert Xue      deprecated="not deprecated">
4936*dc5640d1SHerbert Xue    </method>
4937*dc5640d1SHerbert Xue    <method name="setTailCompassPoint"
4938*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4939*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4940*dc5640d1SHerbert Xue      deprecated="not deprecated">
4941*dc5640d1SHerbert Xue      <param name="tailCompassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
4942*dc5640d1SHerbert Xue    </method>
4943*dc5640d1SHerbert Xue    <method name="getArrowTail" return="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"
4944*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4945*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4946*dc5640d1SHerbert Xue      deprecated="not deprecated">
4947*dc5640d1SHerbert Xue    </method>
4948*dc5640d1SHerbert Xue    <method name="setArrowTail"
4949*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4950*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4951*dc5640d1SHerbert Xue      deprecated="not deprecated">
4952*dc5640d1SHerbert Xue      <param name="arrowTail" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
4953*dc5640d1SHerbert Xue    </method>
4954*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.EdgeStyle"
4955*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4956*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4957*dc5640d1SHerbert Xue      deprecated="not deprecated">
4958*dc5640d1SHerbert Xue    </method>
4959*dc5640d1SHerbert Xue    <method name="setStyle"
4960*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4961*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4962*dc5640d1SHerbert Xue      deprecated="not deprecated">
4963*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.EdgeStyle"/>
4964*dc5640d1SHerbert Xue    </method>
4965*dc5640d1SHerbert Xue    <doc>
4966*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz edges that we're
4967*dc5640d1SHerbert Xue interested in drawing.
4968*dc5640d1SHerbert Xue
4969*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
4970*dc5640d1SHerbert Xue    </doc>
4971*dc5640d1SHerbert Xue  </class>
4972*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizEdge -->
4973*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizGrapher -->
4974*dc5640d1SHerbert Xue  <class name="GraphvizGrapher" extends="com.google.inject.grapher.AbstractInjectorGrapher"
4975*dc5640d1SHerbert Xue    abstract="false"
4976*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
4977*dc5640d1SHerbert Xue    deprecated="not deprecated">
4978*dc5640d1SHerbert Xue    <method name="reset"
4979*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4980*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4981*dc5640d1SHerbert Xue      deprecated="not deprecated">
4982*dc5640d1SHerbert Xue    </method>
4983*dc5640d1SHerbert Xue    <method name="setOut"
4984*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4985*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4986*dc5640d1SHerbert Xue      deprecated="not deprecated">
4987*dc5640d1SHerbert Xue      <param name="out" type="java.io.PrintWriter"/>
4988*dc5640d1SHerbert Xue    </method>
4989*dc5640d1SHerbert Xue    <method name="setRankdir"
4990*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4991*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
4992*dc5640d1SHerbert Xue      deprecated="not deprecated">
4993*dc5640d1SHerbert Xue      <param name="rankdir" type="java.lang.String"/>
4994*dc5640d1SHerbert Xue    </method>
4995*dc5640d1SHerbert Xue    <method name="postProcess"
4996*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
4997*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
4998*dc5640d1SHerbert Xue      deprecated="not deprecated">
4999*dc5640d1SHerbert Xue    </method>
5000*dc5640d1SHerbert Xue    <method name="getGraphAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5001*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5002*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5003*dc5640d1SHerbert Xue      deprecated="not deprecated">
5004*dc5640d1SHerbert Xue    </method>
5005*dc5640d1SHerbert Xue    <method name="start"
5006*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5007*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5008*dc5640d1SHerbert Xue      deprecated="not deprecated">
5009*dc5640d1SHerbert Xue    </method>
5010*dc5640d1SHerbert Xue    <method name="finish"
5011*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5012*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5013*dc5640d1SHerbert Xue      deprecated="not deprecated">
5014*dc5640d1SHerbert Xue    </method>
5015*dc5640d1SHerbert Xue    <method name="renderNode"
5016*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5017*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5018*dc5640d1SHerbert Xue      deprecated="not deprecated">
5019*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5020*dc5640d1SHerbert Xue    </method>
5021*dc5640d1SHerbert Xue    <method name="getNodeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5022*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5023*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5024*dc5640d1SHerbert Xue      deprecated="not deprecated">
5025*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5026*dc5640d1SHerbert Xue    </method>
5027*dc5640d1SHerbert Xue    <method name="getNodeLabel" return="java.lang.String"
5028*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5029*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5030*dc5640d1SHerbert Xue      deprecated="not deprecated">
5031*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.graphviz.GraphvizNode"/>
5032*dc5640d1SHerbert Xue      <doc>
5033*dc5640d1SHerbert Xue      <![CDATA[Creates the "label" for a node. This is a string of HTML that defines a
5034*dc5640d1SHerbert Xue table with a heading at the top and (in the case of
5035*dc5640d1SHerbert Xue {@link ImplementationNode}s) rows for each of the member fields.]]>
5036*dc5640d1SHerbert Xue      </doc>
5037*dc5640d1SHerbert Xue    </method>
5038*dc5640d1SHerbert Xue    <method name="renderEdge"
5039*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5040*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5041*dc5640d1SHerbert Xue      deprecated="not deprecated">
5042*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5043*dc5640d1SHerbert Xue    </method>
5044*dc5640d1SHerbert Xue    <method name="getEdgeAttributes" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5045*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5046*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5047*dc5640d1SHerbert Xue      deprecated="not deprecated">
5048*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.graphviz.GraphvizEdge"/>
5049*dc5640d1SHerbert Xue    </method>
5050*dc5640d1SHerbert Xue    <method name="getArrowString" return="java.lang.String"
5051*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5052*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5053*dc5640d1SHerbert Xue      deprecated="not deprecated">
5054*dc5640d1SHerbert Xue      <param name="arrows" type="java.util.List&lt;com.google.inject.grapher.graphviz.ArrowType&gt;"/>
5055*dc5640d1SHerbert Xue      <doc>
5056*dc5640d1SHerbert Xue      <![CDATA[Turns a {@link List} of {@link ArrowType}s into a {@link String} that
5057*dc5640d1SHerbert Xue represents combining them. With Graphviz, that just means concatenating
5058*dc5640d1SHerbert Xue them.]]>
5059*dc5640d1SHerbert Xue      </doc>
5060*dc5640d1SHerbert Xue    </method>
5061*dc5640d1SHerbert Xue    <method name="getEdgeEndPoint" return="java.lang.String"
5062*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5063*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5064*dc5640d1SHerbert Xue      deprecated="not deprecated">
5065*dc5640d1SHerbert Xue      <param name="nodeId" type="java.lang.String"/>
5066*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
5067*dc5640d1SHerbert Xue      <param name="compassPoint" type="com.google.inject.grapher.graphviz.CompassPoint"/>
5068*dc5640d1SHerbert Xue    </method>
5069*dc5640d1SHerbert Xue    <method name="htmlEscape" return="java.lang.String"
5070*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5071*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5072*dc5640d1SHerbert Xue      deprecated="not deprecated">
5073*dc5640d1SHerbert Xue      <param name="str" type="java.lang.String"/>
5074*dc5640d1SHerbert Xue    </method>
5075*dc5640d1SHerbert Xue    <method name="htmlEscape" return="java.util.List&lt;java.lang.String&gt;"
5076*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5077*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5078*dc5640d1SHerbert Xue      deprecated="not deprecated">
5079*dc5640d1SHerbert Xue      <param name="elements" type="java.util.List&lt;java.lang.String&gt;"/>
5080*dc5640d1SHerbert Xue    </method>
5081*dc5640d1SHerbert Xue    <method name="newInterfaceNode"
5082*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5083*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5084*dc5640d1SHerbert Xue      deprecated="not deprecated">
5085*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InterfaceNode"/>
5086*dc5640d1SHerbert Xue    </method>
5087*dc5640d1SHerbert Xue    <method name="newImplementationNode"
5088*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5089*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5090*dc5640d1SHerbert Xue      deprecated="not deprecated">
5091*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.ImplementationNode"/>
5092*dc5640d1SHerbert Xue    </method>
5093*dc5640d1SHerbert Xue    <method name="newInstanceNode"
5094*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5095*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5096*dc5640d1SHerbert Xue      deprecated="not deprecated">
5097*dc5640d1SHerbert Xue      <param name="node" type="com.google.inject.grapher.InstanceNode"/>
5098*dc5640d1SHerbert Xue    </method>
5099*dc5640d1SHerbert Xue    <method name="newDependencyEdge"
5100*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5101*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5102*dc5640d1SHerbert Xue      deprecated="not deprecated">
5103*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.DependencyEdge"/>
5104*dc5640d1SHerbert Xue    </method>
5105*dc5640d1SHerbert Xue    <method name="newBindingEdge"
5106*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5107*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5108*dc5640d1SHerbert Xue      deprecated="not deprecated">
5109*dc5640d1SHerbert Xue      <param name="edge" type="com.google.inject.grapher.BindingEdge"/>
5110*dc5640d1SHerbert Xue    </method>
5111*dc5640d1SHerbert Xue    <doc>
5112*dc5640d1SHerbert Xue    <![CDATA[{@link com.google.inject.grapher.InjectorGrapher} implementation that writes out a Graphviz DOT
5113*dc5640d1SHerbert Xue file of the graph. Dependencies are bound in {@link GraphvizModule}.
5114*dc5640d1SHerbert Xue <p>
5115*dc5640d1SHerbert Xue Specify the {@link PrintWriter} to output to with {@link #setOut(PrintWriter)}.
5116*dc5640d1SHerbert Xue
5117*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)
5118*dc5640d1SHerbert Xue @since 4.0]]>
5119*dc5640d1SHerbert Xue    </doc>
5120*dc5640d1SHerbert Xue  </class>
5121*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizGrapher -->
5122*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizModule -->
5123*dc5640d1SHerbert Xue  <class name="GraphvizModule" extends="com.google.inject.AbstractModule"
5124*dc5640d1SHerbert Xue    abstract="false"
5125*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5126*dc5640d1SHerbert Xue    deprecated="not deprecated">
5127*dc5640d1SHerbert Xue    <constructor name="GraphvizModule"
5128*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5129*dc5640d1SHerbert Xue      deprecated="not deprecated">
5130*dc5640d1SHerbert Xue    </constructor>
5131*dc5640d1SHerbert Xue    <method name="configure"
5132*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5133*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
5134*dc5640d1SHerbert Xue      deprecated="not deprecated">
5135*dc5640d1SHerbert Xue    </method>
5136*dc5640d1SHerbert Xue    <doc>
5137*dc5640d1SHerbert Xue    <![CDATA[Module that provides classes needed by {@link GraphvizGrapher}.
5138*dc5640d1SHerbert Xue
5139*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5140*dc5640d1SHerbert Xue    </doc>
5141*dc5640d1SHerbert Xue  </class>
5142*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizModule -->
5143*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.GraphvizNode -->
5144*dc5640d1SHerbert Xue  <class name="GraphvizNode" extends="java.lang.Object"
5145*dc5640d1SHerbert Xue    abstract="false"
5146*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5147*dc5640d1SHerbert Xue    deprecated="not deprecated">
5148*dc5640d1SHerbert Xue    <constructor name="GraphvizNode" type="com.google.inject.grapher.NodeId"
5149*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5150*dc5640d1SHerbert Xue      deprecated="not deprecated">
5151*dc5640d1SHerbert Xue      <doc>
5152*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5153*dc5640d1SHerbert Xue      </doc>
5154*dc5640d1SHerbert Xue    </constructor>
5155*dc5640d1SHerbert Xue    <method name="getNodeId" return="com.google.inject.grapher.NodeId"
5156*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5157*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5158*dc5640d1SHerbert Xue      deprecated="not deprecated">
5159*dc5640d1SHerbert Xue      <doc>
5160*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5161*dc5640d1SHerbert Xue      </doc>
5162*dc5640d1SHerbert Xue    </method>
5163*dc5640d1SHerbert Xue    <method name="getShape" return="com.google.inject.grapher.graphviz.NodeShape"
5164*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5165*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5166*dc5640d1SHerbert Xue      deprecated="not deprecated">
5167*dc5640d1SHerbert Xue    </method>
5168*dc5640d1SHerbert Xue    <method name="setShape"
5169*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5170*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5171*dc5640d1SHerbert Xue      deprecated="not deprecated">
5172*dc5640d1SHerbert Xue      <param name="shape" type="com.google.inject.grapher.graphviz.NodeShape"/>
5173*dc5640d1SHerbert Xue    </method>
5174*dc5640d1SHerbert Xue    <method name="getStyle" return="com.google.inject.grapher.graphviz.NodeStyle"
5175*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5176*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5177*dc5640d1SHerbert Xue      deprecated="not deprecated">
5178*dc5640d1SHerbert Xue    </method>
5179*dc5640d1SHerbert Xue    <method name="setStyle"
5180*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5181*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5182*dc5640d1SHerbert Xue      deprecated="not deprecated">
5183*dc5640d1SHerbert Xue      <param name="style" type="com.google.inject.grapher.graphviz.NodeStyle"/>
5184*dc5640d1SHerbert Xue    </method>
5185*dc5640d1SHerbert Xue    <method name="getTitle" return="java.lang.String"
5186*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5187*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5188*dc5640d1SHerbert Xue      deprecated="not deprecated">
5189*dc5640d1SHerbert Xue    </method>
5190*dc5640d1SHerbert Xue    <method name="setTitle"
5191*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5192*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5193*dc5640d1SHerbert Xue      deprecated="not deprecated">
5194*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
5195*dc5640d1SHerbert Xue    </method>
5196*dc5640d1SHerbert Xue    <method name="getSubtitles" return="java.util.List&lt;java.lang.String&gt;"
5197*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5198*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5199*dc5640d1SHerbert Xue      deprecated="not deprecated">
5200*dc5640d1SHerbert Xue    </method>
5201*dc5640d1SHerbert Xue    <method name="addSubtitle"
5202*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5203*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5204*dc5640d1SHerbert Xue      deprecated="not deprecated">
5205*dc5640d1SHerbert Xue      <param name="position" type="int"/>
5206*dc5640d1SHerbert Xue      <param name="subtitle" type="java.lang.String"/>
5207*dc5640d1SHerbert Xue    </method>
5208*dc5640d1SHerbert Xue    <method name="getHeaderTextColor" return="java.lang.String"
5209*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5210*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5211*dc5640d1SHerbert Xue      deprecated="not deprecated">
5212*dc5640d1SHerbert Xue    </method>
5213*dc5640d1SHerbert Xue    <method name="setHeaderTextColor"
5214*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5215*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5216*dc5640d1SHerbert Xue      deprecated="not deprecated">
5217*dc5640d1SHerbert Xue      <param name="headerTextColor" type="java.lang.String"/>
5218*dc5640d1SHerbert Xue    </method>
5219*dc5640d1SHerbert Xue    <method name="getHeaderBackgroundColor" return="java.lang.String"
5220*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5221*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5222*dc5640d1SHerbert Xue      deprecated="not deprecated">
5223*dc5640d1SHerbert Xue    </method>
5224*dc5640d1SHerbert Xue    <method name="setHeaderBackgroundColor"
5225*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5226*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5227*dc5640d1SHerbert Xue      deprecated="not deprecated">
5228*dc5640d1SHerbert Xue      <param name="headerBackgroundColor" type="java.lang.String"/>
5229*dc5640d1SHerbert Xue    </method>
5230*dc5640d1SHerbert Xue    <method name="addField"
5231*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5232*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5233*dc5640d1SHerbert Xue      deprecated="not deprecated">
5234*dc5640d1SHerbert Xue      <param name="portId" type="java.lang.String"/>
5235*dc5640d1SHerbert Xue      <param name="title" type="java.lang.String"/>
5236*dc5640d1SHerbert Xue    </method>
5237*dc5640d1SHerbert Xue    <method name="getFields" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
5238*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5239*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5240*dc5640d1SHerbert Xue      deprecated="not deprecated">
5241*dc5640d1SHerbert Xue    </method>
5242*dc5640d1SHerbert Xue    <method name="getIdentifier" return="java.lang.String"
5243*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5244*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5245*dc5640d1SHerbert Xue      deprecated="not deprecated">
5246*dc5640d1SHerbert Xue      <doc>
5247*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5248*dc5640d1SHerbert Xue      </doc>
5249*dc5640d1SHerbert Xue    </method>
5250*dc5640d1SHerbert Xue    <method name="setIdentifier"
5251*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5252*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5253*dc5640d1SHerbert Xue      deprecated="not deprecated">
5254*dc5640d1SHerbert Xue      <param name="identifier" type="java.lang.String"/>
5255*dc5640d1SHerbert Xue      <doc>
5256*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
5257*dc5640d1SHerbert Xue      </doc>
5258*dc5640d1SHerbert Xue    </method>
5259*dc5640d1SHerbert Xue    <doc>
5260*dc5640d1SHerbert Xue    <![CDATA[Data object to encapsulate the attributes of Graphviz nodes that we're
5261*dc5640d1SHerbert Xue interested in drawing.
5262*dc5640d1SHerbert Xue
5263*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5264*dc5640d1SHerbert Xue    </doc>
5265*dc5640d1SHerbert Xue  </class>
5266*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.GraphvizNode -->
5267*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeShape -->
5268*dc5640d1SHerbert Xue  <class name="NodeShape" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeShape&gt;"
5269*dc5640d1SHerbert Xue    abstract="false"
5270*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5271*dc5640d1SHerbert Xue    deprecated="not deprecated">
5272*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeShape[]"
5273*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5274*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5275*dc5640d1SHerbert Xue      deprecated="not deprecated">
5276*dc5640d1SHerbert Xue    </method>
5277*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeShape"
5278*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5279*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5280*dc5640d1SHerbert Xue      deprecated="not deprecated">
5281*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5282*dc5640d1SHerbert Xue    </method>
5283*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5284*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5285*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5286*dc5640d1SHerbert Xue      deprecated="not deprecated">
5287*dc5640d1SHerbert Xue    </method>
5288*dc5640d1SHerbert Xue    <doc>
5289*dc5640d1SHerbert Xue    <![CDATA[Enum for the shapes that are most interesting for Guice graphing.
5290*dc5640d1SHerbert Xue <p>
5291*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/shapes.html
5292*dc5640d1SHerbert Xue
5293*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5294*dc5640d1SHerbert Xue    </doc>
5295*dc5640d1SHerbert Xue  </class>
5296*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeShape -->
5297*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.NodeStyle -->
5298*dc5640d1SHerbert Xue  <class name="NodeStyle" extends="java.lang.Enum&lt;com.google.inject.grapher.graphviz.NodeStyle&gt;"
5299*dc5640d1SHerbert Xue    abstract="false"
5300*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
5301*dc5640d1SHerbert Xue    deprecated="not deprecated">
5302*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.grapher.graphviz.NodeStyle[]"
5303*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5304*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5305*dc5640d1SHerbert Xue      deprecated="not deprecated">
5306*dc5640d1SHerbert Xue    </method>
5307*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.grapher.graphviz.NodeStyle"
5308*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5309*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5310*dc5640d1SHerbert Xue      deprecated="not deprecated">
5311*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5312*dc5640d1SHerbert Xue    </method>
5313*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
5314*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5315*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5316*dc5640d1SHerbert Xue      deprecated="not deprecated">
5317*dc5640d1SHerbert Xue    </method>
5318*dc5640d1SHerbert Xue    <doc>
5319*dc5640d1SHerbert Xue    <![CDATA[Styles for nodes. Similar to {@link EdgeStyle} but with a few more options.
5320*dc5640d1SHerbert Xue <p>
5321*dc5640d1SHerbert Xue See: http://www.graphviz.org/doc/info/attrs.html#k:style
5322*dc5640d1SHerbert Xue
5323*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5324*dc5640d1SHerbert Xue    </doc>
5325*dc5640d1SHerbert Xue  </class>
5326*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.NodeStyle -->
5327*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.grapher.graphviz.PortIdFactory -->
5328*dc5640d1SHerbert Xue  <interface name="PortIdFactory"    abstract="true"
5329*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5330*dc5640d1SHerbert Xue    deprecated="not deprecated">
5331*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5332*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5333*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5334*dc5640d1SHerbert Xue      deprecated="not deprecated">
5335*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5336*dc5640d1SHerbert Xue    </method>
5337*dc5640d1SHerbert Xue    <doc>
5338*dc5640d1SHerbert Xue    <![CDATA[Interface for a service that returns Graphviz port IDs, used for naming the
5339*dc5640d1SHerbert Xue rows in {@link com.google.inject.grapher.ImplementationNode}-displaying {@link GraphvizNode}s.
5340*dc5640d1SHerbert Xue
5341*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5342*dc5640d1SHerbert Xue    </doc>
5343*dc5640d1SHerbert Xue  </interface>
5344*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.grapher.graphviz.PortIdFactory -->
5345*dc5640d1SHerbert Xue  <!-- start class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5346*dc5640d1SHerbert Xue  <class name="PortIdFactoryImpl" extends="java.lang.Object"
5347*dc5640d1SHerbert Xue    abstract="false"
5348*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5349*dc5640d1SHerbert Xue    deprecated="not deprecated">
5350*dc5640d1SHerbert Xue    <implements name="com.google.inject.grapher.graphviz.PortIdFactory"/>
5351*dc5640d1SHerbert Xue    <constructor name="PortIdFactoryImpl"
5352*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5353*dc5640d1SHerbert Xue      deprecated="not deprecated">
5354*dc5640d1SHerbert Xue    </constructor>
5355*dc5640d1SHerbert Xue    <method name="getPortId" return="java.lang.String"
5356*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5357*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5358*dc5640d1SHerbert Xue      deprecated="not deprecated">
5359*dc5640d1SHerbert Xue      <param name="member" type="java.lang.reflect.Member"/>
5360*dc5640d1SHerbert Xue    </method>
5361*dc5640d1SHerbert Xue    <doc>
5362*dc5640d1SHerbert Xue    <![CDATA[Implementation of {@link PortIdFactory}. Bound in {@link GraphvizModule}.
5363*dc5640d1SHerbert Xue
5364*dc5640d1SHerbert Xue @author [email protected] (Pete Hopkins)]]>
5365*dc5640d1SHerbert Xue    </doc>
5366*dc5640d1SHerbert Xue  </class>
5367*dc5640d1SHerbert Xue  <!-- end class com.google.inject.grapher.graphviz.PortIdFactoryImpl -->
5368*dc5640d1SHerbert Xue</package>
5369*dc5640d1SHerbert Xue<package name="com.google.inject.jndi">
5370*dc5640d1SHerbert Xue  <!-- start class com.google.inject.jndi.JndiIntegration -->
5371*dc5640d1SHerbert Xue  <class name="JndiIntegration" extends="java.lang.Object"
5372*dc5640d1SHerbert Xue    abstract="false"
5373*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5374*dc5640d1SHerbert Xue    deprecated="not deprecated">
5375*dc5640d1SHerbert Xue    <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
5376*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5377*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5378*dc5640d1SHerbert Xue      deprecated="not deprecated">
5379*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5380*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
5381*dc5640d1SHerbert Xue      <doc>
5382*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
5383*dc5640d1SHerbert Xue Example usage:
5384*dc5640d1SHerbert Xue
5385*dc5640d1SHerbert Xue <pre>
5386*dc5640d1SHerbert Xue bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
5387*dc5640d1SHerbert Xue </pre>]]>
5388*dc5640d1SHerbert Xue      </doc>
5389*dc5640d1SHerbert Xue    </method>
5390*dc5640d1SHerbert Xue    <doc>
5391*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with JNDI. Requires a binding to
5392*dc5640d1SHerbert Xue {@link javax.naming.Context}.
5393*dc5640d1SHerbert Xue
5394*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5395*dc5640d1SHerbert Xue    </doc>
5396*dc5640d1SHerbert Xue  </class>
5397*dc5640d1SHerbert Xue  <!-- end class com.google.inject.jndi.JndiIntegration -->
5398*dc5640d1SHerbert Xue</package>
5399*dc5640d1SHerbert Xue<package name="com.google.inject.matcher">
5400*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.AbstractMatcher -->
5401*dc5640d1SHerbert Xue  <class name="AbstractMatcher" extends="java.lang.Object"
5402*dc5640d1SHerbert Xue    abstract="true"
5403*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5404*dc5640d1SHerbert Xue    deprecated="not deprecated">
5405*dc5640d1SHerbert Xue    <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
5406*dc5640d1SHerbert Xue    <constructor name="AbstractMatcher"
5407*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5408*dc5640d1SHerbert Xue      deprecated="not deprecated">
5409*dc5640d1SHerbert Xue    </constructor>
5410*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5411*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5412*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5413*dc5640d1SHerbert Xue      deprecated="not deprecated">
5414*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5415*dc5640d1SHerbert Xue    </method>
5416*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5417*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5418*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5419*dc5640d1SHerbert Xue      deprecated="not deprecated">
5420*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5421*dc5640d1SHerbert Xue    </method>
5422*dc5640d1SHerbert Xue    <doc>
5423*dc5640d1SHerbert Xue    <![CDATA[Implements {@code and()} and {@code or()}.
5424*dc5640d1SHerbert Xue
5425*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5426*dc5640d1SHerbert Xue    </doc>
5427*dc5640d1SHerbert Xue  </class>
5428*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.AbstractMatcher -->
5429*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.matcher.Matcher -->
5430*dc5640d1SHerbert Xue  <interface name="Matcher"    abstract="true"
5431*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5432*dc5640d1SHerbert Xue    deprecated="not deprecated">
5433*dc5640d1SHerbert Xue    <method name="matches" return="boolean"
5434*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5435*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5436*dc5640d1SHerbert Xue      deprecated="not deprecated">
5437*dc5640d1SHerbert Xue      <param name="t" type="T"/>
5438*dc5640d1SHerbert Xue      <doc>
5439*dc5640d1SHerbert Xue      <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
5440*dc5640d1SHerbert Xue      </doc>
5441*dc5640d1SHerbert Xue    </method>
5442*dc5640d1SHerbert Xue    <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5443*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5444*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5445*dc5640d1SHerbert Xue      deprecated="not deprecated">
5446*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5447*dc5640d1SHerbert Xue      <doc>
5448*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if both this and the
5449*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5450*dc5640d1SHerbert Xue      </doc>
5451*dc5640d1SHerbert Xue    </method>
5452*dc5640d1SHerbert Xue    <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5453*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5454*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5455*dc5640d1SHerbert Xue      deprecated="not deprecated">
5456*dc5640d1SHerbert Xue      <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5457*dc5640d1SHerbert Xue      <doc>
5458*dc5640d1SHerbert Xue      <![CDATA[Returns a new matcher which returns {@code true} if either this or the
5459*dc5640d1SHerbert Xue given matcher return {@code true}.]]>
5460*dc5640d1SHerbert Xue      </doc>
5461*dc5640d1SHerbert Xue    </method>
5462*dc5640d1SHerbert Xue    <doc>
5463*dc5640d1SHerbert Xue    <![CDATA[Returns {@code true} or {@code false} for a given input.
5464*dc5640d1SHerbert Xue
5465*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5466*dc5640d1SHerbert Xue    </doc>
5467*dc5640d1SHerbert Xue  </interface>
5468*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.matcher.Matcher -->
5469*dc5640d1SHerbert Xue  <!-- start class com.google.inject.matcher.Matchers -->
5470*dc5640d1SHerbert Xue  <class name="Matchers" extends="java.lang.Object"
5471*dc5640d1SHerbert Xue    abstract="false"
5472*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5473*dc5640d1SHerbert Xue    deprecated="not deprecated">
5474*dc5640d1SHerbert Xue    <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5475*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5476*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5477*dc5640d1SHerbert Xue      deprecated="not deprecated">
5478*dc5640d1SHerbert Xue      <doc>
5479*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches any input.]]>
5480*dc5640d1SHerbert Xue      </doc>
5481*dc5640d1SHerbert Xue    </method>
5482*dc5640d1SHerbert Xue    <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
5483*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5484*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5485*dc5640d1SHerbert Xue      deprecated="not deprecated">
5486*dc5640d1SHerbert Xue      <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
5487*dc5640d1SHerbert Xue      <doc>
5488*dc5640d1SHerbert Xue      <![CDATA[Inverts the given matcher.]]>
5489*dc5640d1SHerbert Xue      </doc>
5490*dc5640d1SHerbert Xue    </method>
5491*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5492*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5493*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5494*dc5640d1SHerbert Xue      deprecated="not deprecated">
5495*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5496*dc5640d1SHerbert Xue      <doc>
5497*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5498*dc5640d1SHerbert Xue with a given annotation.]]>
5499*dc5640d1SHerbert Xue      </doc>
5500*dc5640d1SHerbert Xue    </method>
5501*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
5502*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5503*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5504*dc5640d1SHerbert Xue      deprecated="not deprecated">
5505*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5506*dc5640d1SHerbert Xue      <doc>
5507*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
5508*dc5640d1SHerbert Xue with a given annotation.]]>
5509*dc5640d1SHerbert Xue      </doc>
5510*dc5640d1SHerbert Xue    </method>
5511*dc5640d1SHerbert Xue    <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5512*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5513*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5514*dc5640d1SHerbert Xue      deprecated="not deprecated">
5515*dc5640d1SHerbert Xue      <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
5516*dc5640d1SHerbert Xue      <doc>
5517*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
5518*dc5640d1SHerbert Xue the given type).]]>
5519*dc5640d1SHerbert Xue      </doc>
5520*dc5640d1SHerbert Xue    </method>
5521*dc5640d1SHerbert Xue    <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5522*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5523*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5524*dc5640d1SHerbert Xue      deprecated="not deprecated">
5525*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5526*dc5640d1SHerbert Xue      <doc>
5527*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
5528*dc5640d1SHerbert Xue      </doc>
5529*dc5640d1SHerbert Xue    </method>
5530*dc5640d1SHerbert Xue    <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
5531*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5532*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5533*dc5640d1SHerbert Xue      deprecated="not deprecated">
5534*dc5640d1SHerbert Xue      <param name="value" type="java.lang.Object"/>
5535*dc5640d1SHerbert Xue      <doc>
5536*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches only the given object.]]>
5537*dc5640d1SHerbert Xue      </doc>
5538*dc5640d1SHerbert Xue    </method>
5539*dc5640d1SHerbert Xue    <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5540*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5541*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5542*dc5640d1SHerbert Xue      deprecated="not deprecated">
5543*dc5640d1SHerbert Xue      <param name="targetPackage" type="java.lang.Package"/>
5544*dc5640d1SHerbert Xue      <doc>
5545*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
5546*dc5640d1SHerbert Xue classloader, so classes with the same package name may not have the same package at runtime.]]>
5547*dc5640d1SHerbert Xue      </doc>
5548*dc5640d1SHerbert Xue    </method>
5549*dc5640d1SHerbert Xue    <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
5550*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5551*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5552*dc5640d1SHerbert Xue      deprecated="not deprecated">
5553*dc5640d1SHerbert Xue      <param name="targetPackageName" type="java.lang.String"/>
5554*dc5640d1SHerbert Xue      <doc>
5555*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
5556*dc5640d1SHerbert Xue {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
5557*dc5640d1SHerbert Xue
5558*dc5640d1SHerbert Xue @since 2.0]]>
5559*dc5640d1SHerbert Xue      </doc>
5560*dc5640d1SHerbert Xue    </method>
5561*dc5640d1SHerbert Xue    <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
5562*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5563*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5564*dc5640d1SHerbert Xue      deprecated="not deprecated">
5565*dc5640d1SHerbert Xue      <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
5566*dc5640d1SHerbert Xue      <doc>
5567*dc5640d1SHerbert Xue      <![CDATA[Returns a matcher which matches methods with matching return types.]]>
5568*dc5640d1SHerbert Xue      </doc>
5569*dc5640d1SHerbert Xue    </method>
5570*dc5640d1SHerbert Xue    <doc>
5571*dc5640d1SHerbert Xue    <![CDATA[Matcher implementations. Supports matching classes and methods.
5572*dc5640d1SHerbert Xue
5573*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
5574*dc5640d1SHerbert Xue    </doc>
5575*dc5640d1SHerbert Xue  </class>
5576*dc5640d1SHerbert Xue  <!-- end class com.google.inject.matcher.Matchers -->
5577*dc5640d1SHerbert Xue</package>
5578*dc5640d1SHerbert Xue<package name="com.google.inject.multibindings">
5579*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ClassMapKey -->
5580*dc5640d1SHerbert Xue  <class name="ClassMapKey"    abstract="true"
5581*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5582*dc5640d1SHerbert Xue    deprecated="not deprecated">
5583*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
5584*dc5640d1SHerbert Xue    <doc>
5585*dc5640d1SHerbert Xue    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a class map key.
5586*dc5640d1SHerbert Xue
5587*dc5640d1SHerbert Xue @since 4.0]]>
5588*dc5640d1SHerbert Xue    </doc>
5589*dc5640d1SHerbert Xue  </class>
5590*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ClassMapKey -->
5591*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MapBinder -->
5592*dc5640d1SHerbert Xue  <class name="MapBinder" extends="java.lang.Object"
5593*dc5640d1SHerbert Xue    abstract="true"
5594*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5595*dc5640d1SHerbert Xue    deprecated="not deprecated">
5596*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5597*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5598*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5599*dc5640d1SHerbert Xue      deprecated="not deprecated">
5600*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5601*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5602*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5603*dc5640d1SHerbert Xue      <doc>
5604*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5605*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5606*dc5640d1SHerbert Xue      </doc>
5607*dc5640d1SHerbert Xue    </method>
5608*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5609*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5610*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5611*dc5640d1SHerbert Xue      deprecated="not deprecated">
5612*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5613*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5614*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5615*dc5640d1SHerbert Xue      <doc>
5616*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5617*dc5640d1SHerbert Xue {@link Map} that is itself bound with no binding annotation.]]>
5618*dc5640d1SHerbert Xue      </doc>
5619*dc5640d1SHerbert Xue    </method>
5620*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5621*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5622*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5623*dc5640d1SHerbert Xue      deprecated="not deprecated">
5624*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5625*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5626*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5627*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5628*dc5640d1SHerbert Xue      <doc>
5629*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5630*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5631*dc5640d1SHerbert Xue      </doc>
5632*dc5640d1SHerbert Xue    </method>
5633*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5634*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5635*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5636*dc5640d1SHerbert Xue      deprecated="not deprecated">
5637*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5638*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5639*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5640*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5641*dc5640d1SHerbert Xue      <doc>
5642*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5643*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotation}.]]>
5644*dc5640d1SHerbert Xue      </doc>
5645*dc5640d1SHerbert Xue    </method>
5646*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5647*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5648*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5649*dc5640d1SHerbert Xue      deprecated="not deprecated">
5650*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5651*dc5640d1SHerbert Xue      <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
5652*dc5640d1SHerbert Xue      <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
5653*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5654*dc5640d1SHerbert Xue      <doc>
5655*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5656*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5657*dc5640d1SHerbert Xue      </doc>
5658*dc5640d1SHerbert Xue    </method>
5659*dc5640d1SHerbert Xue    <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5660*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5661*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5662*dc5640d1SHerbert Xue      deprecated="not deprecated">
5663*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5664*dc5640d1SHerbert Xue      <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
5665*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
5666*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5667*dc5640d1SHerbert Xue      <doc>
5668*dc5640d1SHerbert Xue      <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
5669*dc5640d1SHerbert Xue {@link Map} that is itself bound with {@code annotationType}.]]>
5670*dc5640d1SHerbert Xue      </doc>
5671*dc5640d1SHerbert Xue    </method>
5672*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
5673*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5674*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5675*dc5640d1SHerbert Xue      deprecated="not deprecated">
5676*dc5640d1SHerbert Xue      <doc>
5677*dc5640d1SHerbert Xue      <![CDATA[Configures the {@code MapBinder} to handle duplicate entries.
5678*dc5640d1SHerbert Xue <p>When multiple equal keys are bound, the value that gets included in the map is
5679*dc5640d1SHerbert Xue arbitrary.
5680*dc5640d1SHerbert Xue <p>In addition to the {@code Map<K, V>} and {@code Map<K, Provider<V>>}
5681*dc5640d1SHerbert Xue maps that are normally bound, a {@code Map<K, Set<V>>} and
5682*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>>} are <em>also</em> bound, which contain
5683*dc5640d1SHerbert Xue all values bound to each key.
5684*dc5640d1SHerbert Xue <p>
5685*dc5640d1SHerbert Xue When multiple modules contribute elements to the map, this configuration
5686*dc5640d1SHerbert Xue option impacts all of them.
5687*dc5640d1SHerbert Xue
5688*dc5640d1SHerbert Xue @return this map binder
5689*dc5640d1SHerbert Xue @since 3.0]]>
5690*dc5640d1SHerbert Xue      </doc>
5691*dc5640d1SHerbert Xue    </method>
5692*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
5693*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5694*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5695*dc5640d1SHerbert Xue      deprecated="not deprecated">
5696*dc5640d1SHerbert Xue      <param name="key" type="K"/>
5697*dc5640d1SHerbert Xue      <doc>
5698*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new entry in the map. Each
5699*dc5640d1SHerbert Xue key must be distinct (and non-null). Bound providers will be evaluated each
5700*dc5640d1SHerbert Xue time the map is injected.
5701*dc5640d1SHerbert Xue
5702*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
5703*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
5704*dc5640d1SHerbert Xue
5705*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
5706*dc5640d1SHerbert Xue to specify a binding scope.]]>
5707*dc5640d1SHerbert Xue      </doc>
5708*dc5640d1SHerbert Xue    </method>
5709*dc5640d1SHerbert Xue    <doc>
5710*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple map entries separately, only to later inject them as
5711*dc5640d1SHerbert Xue a complete map. MapBinder is intended for use in your application's module:
5712*dc5640d1SHerbert Xue <pre><code>
5713*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
5714*dc5640d1SHerbert Xue   protected void configure() {
5715*dc5640d1SHerbert Xue     MapBinder&lt;String, Snack&gt; mapbinder
5716*dc5640d1SHerbert Xue         = MapBinder.newMapBinder(binder(), String.class, Snack.class);
5717*dc5640d1SHerbert Xue     mapbinder.addBinding("twix").toInstance(new Twix());
5718*dc5640d1SHerbert Xue     mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
5719*dc5640d1SHerbert Xue     mapbinder.addBinding("skittles").to(Skittles.class);
5720*dc5640d1SHerbert Xue   }
5721*dc5640d1SHerbert Xue }</code></pre>
5722*dc5640d1SHerbert Xue
5723*dc5640d1SHerbert Xue <p>With this binding, a {@link Map}{@code <String, Snack>} can now be
5724*dc5640d1SHerbert Xue injected:
5725*dc5640d1SHerbert Xue <pre><code>
5726*dc5640d1SHerbert Xue class SnackMachine {
5727*dc5640d1SHerbert Xue   {@literal @}Inject
5728*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
5729*dc5640d1SHerbert Xue }</code></pre>
5730*dc5640d1SHerbert Xue
5731*dc5640d1SHerbert Xue <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
5732*dc5640d1SHerbert Xue {@code Map<K, Provider<V>>} for lazy value provision:
5733*dc5640d1SHerbert Xue <pre><code>
5734*dc5640d1SHerbert Xue class SnackMachine {
5735*dc5640d1SHerbert Xue   {@literal @}Inject
5736*dc5640d1SHerbert Xue   public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
5737*dc5640d1SHerbert Xue }</code></pre>
5738*dc5640d1SHerbert Xue
5739*dc5640d1SHerbert Xue <p>Contributing mapbindings from different modules is supported. For example,
5740*dc5640d1SHerbert Xue it is okay to have both {@code CandyModule} and {@code ChipsModule} both
5741*dc5640d1SHerbert Xue create their own {@code MapBinder<String, Snack>}, and to each contribute
5742*dc5640d1SHerbert Xue bindings to the snacks map. When that map is injected, it will contain
5743*dc5640d1SHerbert Xue entries from both modules.
5744*dc5640d1SHerbert Xue
5745*dc5640d1SHerbert Xue <p>The map's iteration order is consistent with the binding order. This is
5746*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
5747*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
5748*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
5749*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
5750*dc5640d1SHerbert Xue
5751*dc5640d1SHerbert Xue <p>The map is unmodifiable.  Elements can only be added to the map by
5752*dc5640d1SHerbert Xue configuring the MapBinder.  Elements can never be removed from the map.
5753*dc5640d1SHerbert Xue
5754*dc5640d1SHerbert Xue <p>Values are resolved at map injection time. If a value is bound to a
5755*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the map is
5756*dc5640d1SHerbert Xue injected (unless the binding is also scoped, or a map of providers is injected).
5757*dc5640d1SHerbert Xue
5758*dc5640d1SHerbert Xue <p>Annotations are used to create different maps of the same key/value
5759*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent map.
5760*dc5640d1SHerbert Xue
5761*dc5640d1SHerbert Xue <p><strong>Keys must be distinct.</strong> If the same key is bound more than
5762*dc5640d1SHerbert Xue once, map injection will fail. However, use {@link #permitDuplicates()} in
5763*dc5640d1SHerbert Xue order to allow duplicate keys; extra bindings to {@code Map<K, Set<V>>} and
5764*dc5640d1SHerbert Xue {@code Map<K, Set<Provider<V>>} will be added.
5765*dc5640d1SHerbert Xue
5766*dc5640d1SHerbert Xue <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will
5767*dc5640d1SHerbert Xue throw an unchecked exception.
5768*dc5640d1SHerbert Xue
5769*dc5640d1SHerbert Xue <p><strong>Values must be non-null to use map injection.</strong> If any
5770*dc5640d1SHerbert Xue value is null, map injection will fail (although injecting a map of providers
5771*dc5640d1SHerbert Xue will not).
5772*dc5640d1SHerbert Xue
5773*dc5640d1SHerbert Xue @author [email protected] (David P. Baker)]]>
5774*dc5640d1SHerbert Xue    </doc>
5775*dc5640d1SHerbert Xue  </class>
5776*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MapBinder -->
5777*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MapBinderBinding -->
5778*dc5640d1SHerbert Xue  <interface name="MapBinderBinding"    abstract="true"
5779*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5780*dc5640d1SHerbert Xue    deprecated="not deprecated">
5781*dc5640d1SHerbert Xue    <method name="getMapKey" return="com.google.inject.Key&lt;T&gt;"
5782*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5783*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5784*dc5640d1SHerbert Xue      deprecated="not deprecated">
5785*dc5640d1SHerbert Xue      <doc>
5786*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for the map.]]>
5787*dc5640d1SHerbert Xue      </doc>
5788*dc5640d1SHerbert Xue    </method>
5789*dc5640d1SHerbert Xue    <method name="getKeyTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5790*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5791*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5792*dc5640d1SHerbert Xue      deprecated="not deprecated">
5793*dc5640d1SHerbert Xue      <doc>
5794*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the keys of the map.
5795*dc5640d1SHerbert Xue <p>
5796*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5797*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5798*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
5799*dc5640d1SHerbert Xue      </doc>
5800*dc5640d1SHerbert Xue    </method>
5801*dc5640d1SHerbert Xue    <method name="getValueTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
5802*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5803*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5804*dc5640d1SHerbert Xue      deprecated="not deprecated">
5805*dc5640d1SHerbert Xue      <doc>
5806*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral describing the values of the map.
5807*dc5640d1SHerbert Xue <p>
5808*dc5640d1SHerbert Xue The TypeLiteral will always match the type Map's generic type. For example, if getMapKey
5809*dc5640d1SHerbert Xue returns a key of <code>Map&lt;String, Snack></code>, then this will always return a
5810*dc5640d1SHerbert Xue <code>TypeLiteral&lt;Snack></code>.]]>
5811*dc5640d1SHerbert Xue      </doc>
5812*dc5640d1SHerbert Xue    </method>
5813*dc5640d1SHerbert Xue    <method name="getEntries" return="java.util.List&lt;java.util.Map.Entry&lt;?, com.google.inject.Binding&lt;?&gt;&gt;&gt;"
5814*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5815*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5816*dc5640d1SHerbert Xue      deprecated="not deprecated">
5817*dc5640d1SHerbert Xue      <doc>
5818*dc5640d1SHerbert Xue      <![CDATA[Returns all entries in the Map. The returned list of Map.Entries contains the key and a binding
5819*dc5640d1SHerbert Xue to the value. Duplicate keys or values will exist as separate Map.Entries in the returned list.
5820*dc5640d1SHerbert Xue This is only supported on bindings returned from an injector. This will throw
5821*dc5640d1SHerbert Xue {@link UnsupportedOperationException} if it is called on an element retrieved from
5822*dc5640d1SHerbert Xue {@link Elements#getElements}.
5823*dc5640d1SHerbert Xue <p>
5824*dc5640d1SHerbert Xue The elements will always match the type Map's generic type. For example, if getMapKey returns a
5825*dc5640d1SHerbert Xue key of <code>Map&lt;String, Snack></code>, then this will always return a list of type
5826*dc5640d1SHerbert Xue <code>List&lt;Map.Entry&lt;String, Binding&lt;Snack>>></code>.]]>
5827*dc5640d1SHerbert Xue      </doc>
5828*dc5640d1SHerbert Xue    </method>
5829*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
5830*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5832*dc5640d1SHerbert Xue      deprecated="not deprecated">
5833*dc5640d1SHerbert Xue      <doc>
5834*dc5640d1SHerbert Xue      <![CDATA[Returns true if the MapBinder permits duplicates. This is only supported on bindings returned
5835*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
5836*dc5640d1SHerbert Xue MapBinderBinding retrieved from {@link Elements#getElements}.]]>
5837*dc5640d1SHerbert Xue      </doc>
5838*dc5640d1SHerbert Xue    </method>
5839*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
5840*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5841*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5842*dc5640d1SHerbert Xue      deprecated="not deprecated">
5843*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
5844*dc5640d1SHerbert Xue      <doc>
5845*dc5640d1SHerbert Xue      <![CDATA[Returns true if this MapBinder contains the given Element in order to build the map or uses the
5846*dc5640d1SHerbert Xue given Element in order to support building and injecting the map. This will work for
5847*dc5640d1SHerbert Xue MapBinderBindings retrieved from an injector and {@link Elements#getElements}. Usually this is
5848*dc5640d1SHerbert Xue only necessary if you are working with elements retrieved from modules (without an Injector),
5849*dc5640d1SHerbert Xue otherwise {@link #getEntries} and {@link #permitsDuplicates} are better options.
5850*dc5640d1SHerbert Xue <p>
5851*dc5640d1SHerbert Xue If you need to introspect the details of the map, such as the keys, values or if it permits
5852*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
5853*dc5640d1SHerbert Xue {@link #getEntries()} and {@link #permitsDuplicates()}.]]>
5854*dc5640d1SHerbert Xue      </doc>
5855*dc5640d1SHerbert Xue    </method>
5856*dc5640d1SHerbert Xue    <doc>
5857*dc5640d1SHerbert Xue    <![CDATA[A binding for a MapBinder.
5858*dc5640d1SHerbert Xue <p>
5859*dc5640d1SHerbert Xue Although MapBinders may be injected through a variety of generic types (Map&lt;K, V>, Map
5860*dc5640d1SHerbert Xue &lt;K, Provider&lt;V>>, Map&lt;K, Set&lt;V>>, Map<K, Set&lt;
5861*dc5640d1SHerbert Xue Provider&lt;V>>, and even Set&lt;Map.Entry&lt;K, Provider&lt;V>>), a
5862*dc5640d1SHerbert Xue MapBinderBinding exists only on the Binding associated with the Map&lt;K, V> key. Other
5863*dc5640d1SHerbert Xue bindings can be validated to be derived from this MapBinderBinding using
5864*dc5640d1SHerbert Xue {@link #containsElement(Element)}.
5865*dc5640d1SHerbert Xue
5866*dc5640d1SHerbert Xue @param <T> The fully qualified type of the map, including Map. For example:
5867*dc5640d1SHerbert Xue          <code>MapBinderBinding&lt;Map&lt;String, Snack>></code>
5868*dc5640d1SHerbert Xue
5869*dc5640d1SHerbert Xue @since 3.0
5870*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
5871*dc5640d1SHerbert Xue    </doc>
5872*dc5640d1SHerbert Xue  </interface>
5873*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MapBinderBinding -->
5874*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MapKey -->
5875*dc5640d1SHerbert Xue  <class name="MapKey"    abstract="true"
5876*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5877*dc5640d1SHerbert Xue    deprecated="not deprecated">
5878*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
5879*dc5640d1SHerbert Xue    <doc>
5880*dc5640d1SHerbert Xue    <![CDATA[Allows users define customized key type annotations for map bindings by annotating an annotation
5881*dc5640d1SHerbert Xue of a {@code Map}'s key type. The custom key annotation can be applied to methods also annotated
5882*dc5640d1SHerbert Xue with {@literal @}{@link ProvidesIntoMap}.
5883*dc5640d1SHerbert Xue
5884*dc5640d1SHerbert Xue <p>A {@link StringMapKey} and {@link ClassMapKey} are provided for convenience with maps whose
5885*dc5640d1SHerbert Xue keys are strings or classes. For maps with enums or primitive types as keys, you must provide
5886*dc5640d1SHerbert Xue your own MapKey annotation, such as this one for an enum:
5887*dc5640d1SHerbert Xue
5888*dc5640d1SHerbert Xue <pre>
5889*dc5640d1SHerbert Xue {@literal @}MapKey(unwrapValue = true)
5890*dc5640d1SHerbert Xue {@literal @}Retention(RUNTIME)
5891*dc5640d1SHerbert Xue public {@literal @}interface MyCustomEnumKey {
5892*dc5640d1SHerbert Xue   MyCustomEnum value();
5893*dc5640d1SHerbert Xue }
5894*dc5640d1SHerbert Xue </pre>
5895*dc5640d1SHerbert Xue
5896*dc5640d1SHerbert Xue You can also use the whole annotation as the key, if {@code unwrapValue=false}.
5897*dc5640d1SHerbert Xue When unwrapValue is false, the annotation type will be the key type for the injected map and
5898*dc5640d1SHerbert Xue the annotation instances will be the key values. If {@code unwrapValue=true}, the value() type
5899*dc5640d1SHerbert Xue will be the key type for injected map and the value() instances will be the keys values.
5900*dc5640d1SHerbert Xue
5901*dc5640d1SHerbert Xue @since 4.0]]>
5902*dc5640d1SHerbert Xue    </doc>
5903*dc5640d1SHerbert Xue  </class>
5904*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MapKey -->
5905*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.Multibinder -->
5906*dc5640d1SHerbert Xue  <class name="Multibinder" extends="java.lang.Object"
5907*dc5640d1SHerbert Xue    abstract="true"
5908*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
5909*dc5640d1SHerbert Xue    deprecated="not deprecated">
5910*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5911*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5912*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5913*dc5640d1SHerbert Xue      deprecated="not deprecated">
5914*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5915*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5916*dc5640d1SHerbert Xue      <doc>
5917*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5918*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5919*dc5640d1SHerbert Xue      </doc>
5920*dc5640d1SHerbert Xue    </method>
5921*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5922*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5923*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5924*dc5640d1SHerbert Xue      deprecated="not deprecated">
5925*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5926*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5927*dc5640d1SHerbert Xue      <doc>
5928*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5929*dc5640d1SHerbert Xue itself bound with no binding annotation.]]>
5930*dc5640d1SHerbert Xue      </doc>
5931*dc5640d1SHerbert Xue    </method>
5932*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5933*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5934*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5935*dc5640d1SHerbert Xue      deprecated="not deprecated">
5936*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5937*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5938*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5939*dc5640d1SHerbert Xue      <doc>
5940*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5941*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5942*dc5640d1SHerbert Xue      </doc>
5943*dc5640d1SHerbert Xue    </method>
5944*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5945*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5946*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5947*dc5640d1SHerbert Xue      deprecated="not deprecated">
5948*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5949*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5950*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
5951*dc5640d1SHerbert Xue      <doc>
5952*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5953*dc5640d1SHerbert Xue itself bound with {@code annotation}.]]>
5954*dc5640d1SHerbert Xue      </doc>
5955*dc5640d1SHerbert Xue    </method>
5956*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5957*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5958*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5959*dc5640d1SHerbert Xue      deprecated="not deprecated">
5960*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5961*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
5962*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5963*dc5640d1SHerbert Xue      <doc>
5964*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5965*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5966*dc5640d1SHerbert Xue      </doc>
5967*dc5640d1SHerbert Xue    </method>
5968*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5969*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5970*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5971*dc5640d1SHerbert Xue      deprecated="not deprecated">
5972*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5973*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
5974*dc5640d1SHerbert Xue      <doc>
5975*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of the key's type in a {@link Set} that is
5976*dc5640d1SHerbert Xue itself bound with the annotation (if any) of the key.
5977*dc5640d1SHerbert Xue
5978*dc5640d1SHerbert Xue @since 4.0]]>
5979*dc5640d1SHerbert Xue      </doc>
5980*dc5640d1SHerbert Xue    </method>
5981*dc5640d1SHerbert Xue    <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5982*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
5983*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
5984*dc5640d1SHerbert Xue      deprecated="not deprecated">
5985*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
5986*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
5987*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
5988*dc5640d1SHerbert Xue      <doc>
5989*dc5640d1SHerbert Xue      <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
5990*dc5640d1SHerbert Xue itself bound with {@code annotationType}.]]>
5991*dc5640d1SHerbert Xue      </doc>
5992*dc5640d1SHerbert Xue    </method>
5993*dc5640d1SHerbert Xue    <method name="permitDuplicates" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
5994*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
5995*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
5996*dc5640d1SHerbert Xue      deprecated="not deprecated">
5997*dc5640d1SHerbert Xue      <doc>
5998*dc5640d1SHerbert Xue      <![CDATA[Configures the bound set to silently discard duplicate elements. When multiple equal values are
5999*dc5640d1SHerbert Xue bound, the one that gets included is arbitrary. When multiple modules contribute elements to
6000*dc5640d1SHerbert Xue the set, this configuration option impacts all of them.
6001*dc5640d1SHerbert Xue
6002*dc5640d1SHerbert Xue @return this multibinder
6003*dc5640d1SHerbert Xue @since 3.0]]>
6004*dc5640d1SHerbert Xue      </doc>
6005*dc5640d1SHerbert Xue    </method>
6006*dc5640d1SHerbert Xue    <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6007*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6008*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6009*dc5640d1SHerbert Xue      deprecated="not deprecated">
6010*dc5640d1SHerbert Xue      <doc>
6011*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to add a new element in the set. Each
6012*dc5640d1SHerbert Xue bound element must have a distinct value. Bound providers will be
6013*dc5640d1SHerbert Xue evaluated each time the set is injected.
6014*dc5640d1SHerbert Xue
6015*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the
6016*dc5640d1SHerbert Xue {@code to} methods on the returned binding builder.
6017*dc5640d1SHerbert Xue
6018*dc5640d1SHerbert Xue <p>Scoping elements independently is supported. Use the {@code in} method
6019*dc5640d1SHerbert Xue to specify a binding scope.]]>
6020*dc5640d1SHerbert Xue      </doc>
6021*dc5640d1SHerbert Xue    </method>
6022*dc5640d1SHerbert Xue    <doc>
6023*dc5640d1SHerbert Xue    <![CDATA[An API to bind multiple values separately, only to later inject them as a
6024*dc5640d1SHerbert Xue complete collection. Multibinder is intended for use in your application's
6025*dc5640d1SHerbert Xue module:
6026*dc5640d1SHerbert Xue <pre><code>
6027*dc5640d1SHerbert Xue public class SnacksModule extends AbstractModule {
6028*dc5640d1SHerbert Xue   protected void configure() {
6029*dc5640d1SHerbert Xue     Multibinder&lt;Snack&gt; multibinder
6030*dc5640d1SHerbert Xue         = Multibinder.newSetBinder(binder(), Snack.class);
6031*dc5640d1SHerbert Xue     multibinder.addBinding().toInstance(new Twix());
6032*dc5640d1SHerbert Xue     multibinder.addBinding().toProvider(SnickersProvider.class);
6033*dc5640d1SHerbert Xue     multibinder.addBinding().to(Skittles.class);
6034*dc5640d1SHerbert Xue   }
6035*dc5640d1SHerbert Xue }</code></pre>
6036*dc5640d1SHerbert Xue
6037*dc5640d1SHerbert Xue <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
6038*dc5640d1SHerbert Xue <pre><code>
6039*dc5640d1SHerbert Xue class SnackMachine {
6040*dc5640d1SHerbert Xue   {@literal @}Inject
6041*dc5640d1SHerbert Xue   public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
6042*dc5640d1SHerbert Xue }</code></pre>
6043*dc5640d1SHerbert Xue
6044*dc5640d1SHerbert Xue If desired, {@link Collection}{@code <Provider<Snack>>} can also be injected.
6045*dc5640d1SHerbert Xue
6046*dc5640d1SHerbert Xue <p>Contributing multibindings from different modules is supported. For
6047*dc5640d1SHerbert Xue example, it is okay for both {@code CandyModule} and {@code ChipsModule}
6048*dc5640d1SHerbert Xue to create their own {@code Multibinder<Snack>}, and to each contribute
6049*dc5640d1SHerbert Xue bindings to the set of snacks. When that set is injected, it will contain
6050*dc5640d1SHerbert Xue elements from both modules.
6051*dc5640d1SHerbert Xue
6052*dc5640d1SHerbert Xue <p>The set's iteration order is consistent with the binding order. This is
6053*dc5640d1SHerbert Xue convenient when multiple elements are contributed by the same module because
6054*dc5640d1SHerbert Xue that module can order its bindings appropriately. Avoid relying on the
6055*dc5640d1SHerbert Xue iteration order of elements contributed by different modules, since there is
6056*dc5640d1SHerbert Xue no equivalent mechanism to order modules.
6057*dc5640d1SHerbert Xue
6058*dc5640d1SHerbert Xue <p>The set is unmodifiable.  Elements can only be added to the set by
6059*dc5640d1SHerbert Xue configuring the multibinder.  Elements can never be removed from the set.
6060*dc5640d1SHerbert Xue
6061*dc5640d1SHerbert Xue <p>Elements are resolved at set injection time. If an element is bound to a
6062*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the set is
6063*dc5640d1SHerbert Xue injected (unless the binding is also scoped).
6064*dc5640d1SHerbert Xue
6065*dc5640d1SHerbert Xue <p>Annotations are be used to create different sets of the same element
6066*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent collection of
6067*dc5640d1SHerbert Xue elements.
6068*dc5640d1SHerbert Xue
6069*dc5640d1SHerbert Xue <p><strong>Elements must be distinct.</strong> If multiple bound elements
6070*dc5640d1SHerbert Xue have the same value, set injection will fail.
6071*dc5640d1SHerbert Xue
6072*dc5640d1SHerbert Xue <p><strong>Elements must be non-null.</strong> If any set element is null,
6073*dc5640d1SHerbert Xue set injection will fail.
6074*dc5640d1SHerbert Xue
6075*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)]]>
6076*dc5640d1SHerbert Xue    </doc>
6077*dc5640d1SHerbert Xue  </class>
6078*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.Multibinder -->
6079*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibinderBinding -->
6080*dc5640d1SHerbert Xue  <interface name="MultibinderBinding"    abstract="true"
6081*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6082*dc5640d1SHerbert Xue    deprecated="not deprecated">
6083*dc5640d1SHerbert Xue    <method name="getSetKey" return="com.google.inject.Key&lt;T&gt;"
6084*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6085*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6086*dc5640d1SHerbert Xue      deprecated="not deprecated">
6087*dc5640d1SHerbert Xue      <doc>
6088*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the set.]]>
6089*dc5640d1SHerbert Xue      </doc>
6090*dc5640d1SHerbert Xue    </method>
6091*dc5640d1SHerbert Xue    <method name="getElementTypeLiteral" return="com.google.inject.TypeLiteral&lt;?&gt;"
6092*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6093*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6094*dc5640d1SHerbert Xue      deprecated="not deprecated">
6095*dc5640d1SHerbert Xue      <doc>
6096*dc5640d1SHerbert Xue      <![CDATA[Returns the TypeLiteral that describes the type of elements in the set.
6097*dc5640d1SHerbert Xue <p>
6098*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6099*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a
6100*dc5640d1SHerbert Xue <code>TypeLiteral&lt;String></code>.]]>
6101*dc5640d1SHerbert Xue      </doc>
6102*dc5640d1SHerbert Xue    </method>
6103*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.Binding&lt;?&gt;&gt;"
6104*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6105*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6106*dc5640d1SHerbert Xue      deprecated="not deprecated">
6107*dc5640d1SHerbert Xue      <doc>
6108*dc5640d1SHerbert Xue      <![CDATA[Returns all bindings that make up the set. This is only supported on bindings returned from an
6109*dc5640d1SHerbert Xue injector. This will throw {@link UnsupportedOperationException} if it is called on an element
6110*dc5640d1SHerbert Xue retrieved from {@link Elements#getElements}.
6111*dc5640d1SHerbert Xue <p>
6112*dc5640d1SHerbert Xue The elements will always match the type Set's generic type. For example, if getSetKey returns a
6113*dc5640d1SHerbert Xue key of <code>Set&lt;String></code>, then this will always return a list of type
6114*dc5640d1SHerbert Xue <code>List&lt;Binding&lt;String>></code>.]]>
6115*dc5640d1SHerbert Xue      </doc>
6116*dc5640d1SHerbert Xue    </method>
6117*dc5640d1SHerbert Xue    <method name="permitsDuplicates" return="boolean"
6118*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6119*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6120*dc5640d1SHerbert Xue      deprecated="not deprecated">
6121*dc5640d1SHerbert Xue      <doc>
6122*dc5640d1SHerbert Xue      <![CDATA[Returns true if the multibinder permits duplicates. This is only supported on bindings returned
6123*dc5640d1SHerbert Xue from an injector. This will throw {@link UnsupportedOperationException} if it is called on a
6124*dc5640d1SHerbert Xue MultibinderBinding retrieved from {@link Elements#getElements}.]]>
6125*dc5640d1SHerbert Xue      </doc>
6126*dc5640d1SHerbert Xue    </method>
6127*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
6128*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6129*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6130*dc5640d1SHerbert Xue      deprecated="not deprecated">
6131*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
6132*dc5640d1SHerbert Xue      <doc>
6133*dc5640d1SHerbert Xue      <![CDATA[Returns true if this Multibinder uses the given Element. This will be true for bindings that
6134*dc5640d1SHerbert Xue derive the elements of the set and other bindings that Multibinder uses internally. This will
6135*dc5640d1SHerbert Xue work for MultibinderBindings retrieved from an injector and {@link Elements#getElements}.
6136*dc5640d1SHerbert Xue Usually this is only necessary if you are working with elements retrieved from modules (without
6137*dc5640d1SHerbert Xue an Injector), otherwise {@link #getElements} and {@link #permitsDuplicates} are better options.
6138*dc5640d1SHerbert Xue <p>
6139*dc5640d1SHerbert Xue If you need to introspect the details of the set, such as the values or if it permits
6140*dc5640d1SHerbert Xue duplicates, it is necessary to pass the elements through an Injector and use
6141*dc5640d1SHerbert Xue {@link #getElements()} and {@link #permitsDuplicates()}.]]>
6142*dc5640d1SHerbert Xue      </doc>
6143*dc5640d1SHerbert Xue    </method>
6144*dc5640d1SHerbert Xue    <doc>
6145*dc5640d1SHerbert Xue    <![CDATA[A binding for a Multibinder.
6146*dc5640d1SHerbert Xue
6147*dc5640d1SHerbert Xue @param <T> The fully qualified type of the set, including Set. For example:
6148*dc5640d1SHerbert Xue          <code>MultibinderBinding&lt;Set&lt;Boolean>></code>
6149*dc5640d1SHerbert Xue
6150*dc5640d1SHerbert Xue @since 3.0
6151*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6152*dc5640d1SHerbert Xue    </doc>
6153*dc5640d1SHerbert Xue  </interface>
6154*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibinderBinding -->
6155*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.MultibindingsScanner -->
6156*dc5640d1SHerbert Xue  <class name="MultibindingsScanner" extends="java.lang.Object"
6157*dc5640d1SHerbert Xue    abstract="false"
6158*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6159*dc5640d1SHerbert Xue    deprecated="not deprecated">
6160*dc5640d1SHerbert Xue    <method name="asModule" return="com.google.inject.Module"
6161*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6162*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6163*dc5640d1SHerbert Xue      deprecated="not deprecated">
6164*dc5640d1SHerbert Xue      <doc>
6165*dc5640d1SHerbert Xue      <![CDATA[Returns a module that, when installed, will scan all modules for methods with the annotations
6166*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoMap}, {@literal @}{@link ProvidesIntoSet}, and
6167*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoOptional}.
6168*dc5640d1SHerbert Xue
6169*dc5640d1SHerbert Xue <p>This is a convenience method, equivalent to doing
6170*dc5640d1SHerbert Xue {@code binder().scanModulesForAnnotatedMethods(MultibindingsScanner.scanner())}.]]>
6171*dc5640d1SHerbert Xue      </doc>
6172*dc5640d1SHerbert Xue    </method>
6173*dc5640d1SHerbert Xue    <method name="scanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
6174*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6175*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6176*dc5640d1SHerbert Xue      deprecated="not deprecated">
6177*dc5640d1SHerbert Xue      <doc>
6178*dc5640d1SHerbert Xue      <![CDATA[Returns a {@link ModuleAnnotatedMethodScanner} that, when bound, will scan all modules for
6179*dc5640d1SHerbert Xue methods with the annotations {@literal @}{@link ProvidesIntoMap},
6180*dc5640d1SHerbert Xue {@literal @}{@link ProvidesIntoSet}, and {@literal @}{@link ProvidesIntoOptional}.]]>
6181*dc5640d1SHerbert Xue      </doc>
6182*dc5640d1SHerbert Xue    </method>
6183*dc5640d1SHerbert Xue    <doc>
6184*dc5640d1SHerbert Xue    <![CDATA[Scans a module for annotations that signal multibindings, mapbindings, and optional bindings.
6185*dc5640d1SHerbert Xue
6186*dc5640d1SHerbert Xue @since 4.0]]>
6187*dc5640d1SHerbert Xue    </doc>
6188*dc5640d1SHerbert Xue  </class>
6189*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.MultibindingsScanner -->
6190*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6191*dc5640d1SHerbert Xue  <interface name="MultibindingsTargetVisitor"    abstract="true"
6192*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6193*dc5640d1SHerbert Xue    deprecated="not deprecated">
6194*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
6195*dc5640d1SHerbert Xue    <method name="visit" return="V"
6196*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6197*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6198*dc5640d1SHerbert Xue      deprecated="not deprecated">
6199*dc5640d1SHerbert Xue      <param name="multibinding" type="com.google.inject.multibindings.MultibinderBinding&lt;? extends T&gt;"/>
6200*dc5640d1SHerbert Xue      <doc>
6201*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link Multibinder}.]]>
6202*dc5640d1SHerbert Xue      </doc>
6203*dc5640d1SHerbert Xue    </method>
6204*dc5640d1SHerbert Xue    <method name="visit" return="V"
6205*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6206*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6207*dc5640d1SHerbert Xue      deprecated="not deprecated">
6208*dc5640d1SHerbert Xue      <param name="mapbinding" type="com.google.inject.multibindings.MapBinderBinding&lt;? extends T&gt;"/>
6209*dc5640d1SHerbert Xue      <doc>
6210*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link MapBinder}.]]>
6211*dc5640d1SHerbert Xue      </doc>
6212*dc5640d1SHerbert Xue    </method>
6213*dc5640d1SHerbert Xue    <method name="visit" return="V"
6214*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6215*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6216*dc5640d1SHerbert Xue      deprecated="not deprecated">
6217*dc5640d1SHerbert Xue      <param name="optionalbinding" type="com.google.inject.multibindings.OptionalBinderBinding&lt;? extends T&gt;"/>
6218*dc5640d1SHerbert Xue      <doc>
6219*dc5640d1SHerbert Xue      <![CDATA[Visits a binding created through {@link OptionalBinder}.
6220*dc5640d1SHerbert Xue
6221*dc5640d1SHerbert Xue @since 4.0]]>
6222*dc5640d1SHerbert Xue      </doc>
6223*dc5640d1SHerbert Xue    </method>
6224*dc5640d1SHerbert Xue    <doc>
6225*dc5640d1SHerbert Xue    <![CDATA[A visitor for the multibinder extension.
6226*dc5640d1SHerbert Xue <p>
6227*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
6228*dc5640d1SHerbert Xue {@link Multibinder}, {@link MapBinder} or {@link OptionalBinderBinding} will be visited through
6229*dc5640d1SHerbert Xue this interface.
6230*dc5640d1SHerbert Xue
6231*dc5640d1SHerbert Xue @since 3.0
6232*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6233*dc5640d1SHerbert Xue    </doc>
6234*dc5640d1SHerbert Xue  </interface>
6235*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.MultibindingsTargetVisitor -->
6236*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.OptionalBinder -->
6237*dc5640d1SHerbert Xue  <class name="OptionalBinder" extends="java.lang.Object"
6238*dc5640d1SHerbert Xue    abstract="true"
6239*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6240*dc5640d1SHerbert Xue    deprecated="not deprecated">
6241*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6242*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6243*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6244*dc5640d1SHerbert Xue      deprecated="not deprecated">
6245*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6246*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
6247*dc5640d1SHerbert Xue    </method>
6248*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6249*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6250*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6251*dc5640d1SHerbert Xue      deprecated="not deprecated">
6252*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6253*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
6254*dc5640d1SHerbert Xue    </method>
6255*dc5640d1SHerbert Xue    <method name="newOptionalBinder" return="com.google.inject.multibindings.OptionalBinder&lt;T&gt;"
6256*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6257*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6258*dc5640d1SHerbert Xue      deprecated="not deprecated">
6259*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6260*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.Key&lt;T&gt;"/>
6261*dc5640d1SHerbert Xue    </method>
6262*dc5640d1SHerbert Xue    <method name="setDefault" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6263*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6264*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6265*dc5640d1SHerbert Xue      deprecated="not deprecated">
6266*dc5640d1SHerbert Xue      <doc>
6267*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to set the default value that will be injected.
6268*dc5640d1SHerbert Xue The binding set by this method will be ignored if {@link #setBinding} is called.
6269*dc5640d1SHerbert Xue
6270*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the {@code to}
6271*dc5640d1SHerbert Xue methods on the returned binding builder.]]>
6272*dc5640d1SHerbert Xue      </doc>
6273*dc5640d1SHerbert Xue    </method>
6274*dc5640d1SHerbert Xue    <method name="setBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
6275*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6276*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6277*dc5640d1SHerbert Xue      deprecated="not deprecated">
6278*dc5640d1SHerbert Xue      <doc>
6279*dc5640d1SHerbert Xue      <![CDATA[Returns a binding builder used to set the actual value that will be injected.
6280*dc5640d1SHerbert Xue This overrides any binding set by {@link #setDefault}.
6281*dc5640d1SHerbert Xue
6282*dc5640d1SHerbert Xue <p>It is an error to call this method without also calling one of the {@code to}
6283*dc5640d1SHerbert Xue methods on the returned binding builder.]]>
6284*dc5640d1SHerbert Xue      </doc>
6285*dc5640d1SHerbert Xue    </method>
6286*dc5640d1SHerbert Xue    <doc>
6287*dc5640d1SHerbert Xue    <![CDATA[An API to bind optional values, optionally with a default value.
6288*dc5640d1SHerbert Xue OptionalBinder fulfills two roles: <ol>
6289*dc5640d1SHerbert Xue <li>It allows a framework to define an injection point that may or
6290*dc5640d1SHerbert Xue     may not be bound by users.
6291*dc5640d1SHerbert Xue <li>It allows a framework to supply a default value that can be changed
6292*dc5640d1SHerbert Xue     by users.
6293*dc5640d1SHerbert Xue </ol>
6294*dc5640d1SHerbert Xue
6295*dc5640d1SHerbert Xue <p>When an OptionalBinder is added, it will always supply the bindings:
6296*dc5640d1SHerbert Xue {@code Optional<T>} and {@code Optional<Provider<T>>}.  If
6297*dc5640d1SHerbert Xue {@link #setBinding} or {@link #setDefault} are called, it will also
6298*dc5640d1SHerbert Xue bind {@code T}.
6299*dc5640d1SHerbert Xue
6300*dc5640d1SHerbert Xue <p>{@code setDefault} is intended for use by frameworks that need a default
6301*dc5640d1SHerbert Xue value.  User code can call {@code setBinding} to override the default.
6302*dc5640d1SHerbert Xue <b>Warning: Even if setBinding is called, the default binding
6303*dc5640d1SHerbert Xue will still exist in the object graph.  If it is a singleton, it will be
6304*dc5640d1SHerbert Xue instantiated in {@code Stage.PRODUCTION}.</b>
6305*dc5640d1SHerbert Xue
6306*dc5640d1SHerbert Xue <p>If setDefault or setBinding are linked to Providers, the Provider may return
6307*dc5640d1SHerbert Xue {@code null}.  If it does, the Optional bindings will be absent.  Binding
6308*dc5640d1SHerbert Xue setBinding to a Provider that returns null will not cause OptionalBinder
6309*dc5640d1SHerbert Xue to fall back to the setDefault binding.
6310*dc5640d1SHerbert Xue
6311*dc5640d1SHerbert Xue <p>If neither setDefault nor setBinding are called, it will try to link to a
6312*dc5640d1SHerbert Xue user-supplied binding of the same type.  If no binding exists, the optionals
6313*dc5640d1SHerbert Xue will be absent.  Otherwise, if a user-supplied binding of that type exists,
6314*dc5640d1SHerbert Xue or if setBinding or setDefault are called, the optionals will return present
6315*dc5640d1SHerbert Xue if they are bound to a non-null value.
6316*dc5640d1SHerbert Xue
6317*dc5640d1SHerbert Xue <p>Values are resolved at injection time. If a value is bound to a
6318*dc5640d1SHerbert Xue provider, that provider's get method will be called each time the optional
6319*dc5640d1SHerbert Xue is injected (unless the binding is also scoped, or an optional of provider is
6320*dc5640d1SHerbert Xue injected).
6321*dc5640d1SHerbert Xue
6322*dc5640d1SHerbert Xue <p>Annotations are used to create different optionals of the same key/value
6323*dc5640d1SHerbert Xue type. Each distinct annotation gets its own independent binding.
6324*dc5640d1SHerbert Xue
6325*dc5640d1SHerbert Xue <pre><code>
6326*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6327*dc5640d1SHerbert Xue   protected void configure() {
6328*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Renamer.class);
6329*dc5640d1SHerbert Xue   }
6330*dc5640d1SHerbert Xue }</code></pre>
6331*dc5640d1SHerbert Xue
6332*dc5640d1SHerbert Xue <p>With this module, an {@link Optional}{@code <Renamer>} can now be
6333*dc5640d1SHerbert Xue injected.  With no other bindings, the optional will be absent.
6334*dc5640d1SHerbert Xue Users can specify bindings in one of two ways:
6335*dc5640d1SHerbert Xue
6336*dc5640d1SHerbert Xue <p>Option 1:
6337*dc5640d1SHerbert Xue <pre><code>
6338*dc5640d1SHerbert Xue public class UserRenamerModule extends AbstractModule {
6339*dc5640d1SHerbert Xue   protected void configure() {
6340*dc5640d1SHerbert Xue     bind(Renamer.class).to(ReplacingRenamer.class);
6341*dc5640d1SHerbert Xue   }
6342*dc5640d1SHerbert Xue }</code></pre>
6343*dc5640d1SHerbert Xue
6344*dc5640d1SHerbert Xue <p>or Option 2:
6345*dc5640d1SHerbert Xue <pre><code>
6346*dc5640d1SHerbert Xue public class UserRenamerModule extends AbstractModule {
6347*dc5640d1SHerbert Xue   protected void configure() {
6348*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Renamer.class)
6349*dc5640d1SHerbert Xue         .setBinding().to(ReplacingRenamer.class);
6350*dc5640d1SHerbert Xue   }
6351*dc5640d1SHerbert Xue }</code></pre>
6352*dc5640d1SHerbert Xue With both options, the {@code Optional<Renamer>} will be present and supply the
6353*dc5640d1SHerbert Xue ReplacingRenamer.
6354*dc5640d1SHerbert Xue
6355*dc5640d1SHerbert Xue <p>Default values can be supplied using:
6356*dc5640d1SHerbert Xue <pre><code>
6357*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6358*dc5640d1SHerbert Xue   protected void configure() {
6359*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6360*dc5640d1SHerbert Xue         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6361*dc5640d1SHerbert Xue   }
6362*dc5640d1SHerbert Xue }</code></pre>
6363*dc5640d1SHerbert Xue With the above module, code can inject an {@code @LookupUrl String} and it
6364*dc5640d1SHerbert Xue will supply the DEFAULT_LOOKUP_URL.  A user can change this value by binding
6365*dc5640d1SHerbert Xue <pre><code>
6366*dc5640d1SHerbert Xue public class UserLookupModule extends AbstractModule {
6367*dc5640d1SHerbert Xue   protected void configure() {
6368*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6369*dc5640d1SHerbert Xue         .setBinding().toInstance(CUSTOM_LOOKUP_URL);
6370*dc5640d1SHerbert Xue   }
6371*dc5640d1SHerbert Xue }</code></pre>
6372*dc5640d1SHerbert Xue ... which will override the default value.
6373*dc5640d1SHerbert Xue
6374*dc5640d1SHerbert Xue <p>If one module uses setDefault the only way to override the default is to use setBinding.
6375*dc5640d1SHerbert Xue It is an error for a user to specify the binding without using OptionalBinder if
6376*dc5640d1SHerbert Xue setDefault or setBinding are called.  For example,
6377*dc5640d1SHerbert Xue <pre><code>
6378*dc5640d1SHerbert Xue public class FrameworkModule extends AbstractModule {
6379*dc5640d1SHerbert Xue   protected void configure() {
6380*dc5640d1SHerbert Xue     OptionalBinder.newOptionalBinder(binder(), Key.get(String.class, LookupUrl.class))
6381*dc5640d1SHerbert Xue         .setDefault().toInstance(DEFAULT_LOOKUP_URL);
6382*dc5640d1SHerbert Xue   }
6383*dc5640d1SHerbert Xue }
6384*dc5640d1SHerbert Xue public class UserLookupModule extends AbstractModule {
6385*dc5640d1SHerbert Xue   protected void configure() {
6386*dc5640d1SHerbert Xue     bind(Key.get(String.class, LookupUrl.class)).toInstance(CUSTOM_LOOKUP_URL);
6387*dc5640d1SHerbert Xue   }
6388*dc5640d1SHerbert Xue }</code></pre>
6389*dc5640d1SHerbert Xue ... would generate an error, because both the framework and the user are trying to bind
6390*dc5640d1SHerbert Xue {@code @LookupUrl String}.
6391*dc5640d1SHerbert Xue
6392*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6393*dc5640d1SHerbert Xue @since 4.0]]>
6394*dc5640d1SHerbert Xue    </doc>
6395*dc5640d1SHerbert Xue  </class>
6396*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.OptionalBinder -->
6397*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.multibindings.OptionalBinderBinding -->
6398*dc5640d1SHerbert Xue  <interface name="OptionalBinderBinding"    abstract="true"
6399*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6400*dc5640d1SHerbert Xue    deprecated="not deprecated">
6401*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
6402*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6403*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6404*dc5640d1SHerbert Xue      deprecated="not deprecated">
6405*dc5640d1SHerbert Xue      <doc>
6406*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link Key} for this binding.]]>
6407*dc5640d1SHerbert Xue      </doc>
6408*dc5640d1SHerbert Xue    </method>
6409*dc5640d1SHerbert Xue    <method name="getDefaultBinding" return="com.google.inject.Binding&lt;?&gt;"
6410*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6411*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6412*dc5640d1SHerbert Xue      deprecated="not deprecated">
6413*dc5640d1SHerbert Xue      <doc>
6414*dc5640d1SHerbert Xue      <![CDATA[Returns the default binding (set by {@link OptionalBinder#setDefault}) if one exists or null
6415*dc5640d1SHerbert Xue if no default binding is set. This will throw {@link UnsupportedOperationException} if it is
6416*dc5640d1SHerbert Xue called on an element retrieved from {@link Elements#getElements}.
6417*dc5640d1SHerbert Xue <p>
6418*dc5640d1SHerbert Xue The Binding's type will always match the type Optional's generic type. For example, if getKey
6419*dc5640d1SHerbert Xue returns a key of <code>Optional&lt;String></code>, then this will always return a
6420*dc5640d1SHerbert Xue <code>Binding&lt;String></code>.]]>
6421*dc5640d1SHerbert Xue      </doc>
6422*dc5640d1SHerbert Xue    </method>
6423*dc5640d1SHerbert Xue    <method name="getActualBinding" return="com.google.inject.Binding&lt;?&gt;"
6424*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6425*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6426*dc5640d1SHerbert Xue      deprecated="not deprecated">
6427*dc5640d1SHerbert Xue      <doc>
6428*dc5640d1SHerbert Xue      <![CDATA[Returns the actual binding (set by {@link OptionalBinder#setBinding}) or null if not set.
6429*dc5640d1SHerbert Xue This will throw {@link UnsupportedOperationException} if it is called on an element retrieved
6430*dc5640d1SHerbert Xue from {@link Elements#getElements}.
6431*dc5640d1SHerbert Xue <p>
6432*dc5640d1SHerbert Xue The Binding's type will always match the type Optional's generic type. For example, if getKey
6433*dc5640d1SHerbert Xue returns a key of <code>Optional&lt;String></code>, then this will always return a
6434*dc5640d1SHerbert Xue <code>Binding&lt;String></code>.]]>
6435*dc5640d1SHerbert Xue      </doc>
6436*dc5640d1SHerbert Xue    </method>
6437*dc5640d1SHerbert Xue    <method name="containsElement" return="boolean"
6438*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6439*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6440*dc5640d1SHerbert Xue      deprecated="not deprecated">
6441*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
6442*dc5640d1SHerbert Xue      <doc>
6443*dc5640d1SHerbert Xue      <![CDATA[Returns true if this OptionalBinder contains the given Element in order to build the optional
6444*dc5640d1SHerbert Xue binding or uses the given Element in order to support building and injecting its data. This
6445*dc5640d1SHerbert Xue will work for OptionalBinderBinding retrieved from an injector and
6446*dc5640d1SHerbert Xue {@link Elements#getElements}. Usually this is only necessary if you are working with elements
6447*dc5640d1SHerbert Xue retrieved from modules (without an Injector), otherwise {@link #getDefaultBinding} and
6448*dc5640d1SHerbert Xue {@link #getActualBinding} are better options.]]>
6449*dc5640d1SHerbert Xue      </doc>
6450*dc5640d1SHerbert Xue    </method>
6451*dc5640d1SHerbert Xue    <doc>
6452*dc5640d1SHerbert Xue    <![CDATA[A binding for a OptionalBinder.
6453*dc5640d1SHerbert Xue
6454*dc5640d1SHerbert Xue <p>Although OptionalBinders may be injected through a variety of types
6455*dc5640d1SHerbert Xue {@code T}, {@code Optional<T>}, {@code Optional<Provider<T>>}, etc..), an
6456*dc5640d1SHerbert Xue OptionalBinderBinding exists only on the Binding associated with the
6457*dc5640d1SHerbert Xue {@code Optional<T>} key.  Other bindings can be validated to be derived from this
6458*dc5640d1SHerbert Xue OptionalBinderBinding using {@link #containsElement}.
6459*dc5640d1SHerbert Xue
6460*dc5640d1SHerbert Xue @param <T> The fully qualified type of the optional binding, including Optional.
6461*dc5640d1SHerbert Xue        For example: {@code Optional<String>}.
6462*dc5640d1SHerbert Xue
6463*dc5640d1SHerbert Xue @since 4.0
6464*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
6465*dc5640d1SHerbert Xue    </doc>
6466*dc5640d1SHerbert Xue  </interface>
6467*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.multibindings.OptionalBinderBinding -->
6468*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoMap -->
6469*dc5640d1SHerbert Xue  <class name="ProvidesIntoMap"    abstract="true"
6470*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6471*dc5640d1SHerbert Xue    deprecated="not deprecated">
6472*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6473*dc5640d1SHerbert Xue    <doc>
6474*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link MapBinder}.
6475*dc5640d1SHerbert Xue The method's return type, binding annotation and additional key annotation determines
6476*dc5640d1SHerbert Xue what Map this will contribute to. For example,
6477*dc5640d1SHerbert Xue
6478*dc5640d1SHerbert Xue <pre>
6479*dc5640d1SHerbert Xue {@literal @}ProvidesIntoMap
6480*dc5640d1SHerbert Xue {@literal @}StringMapKey("Foo")
6481*dc5640d1SHerbert Xue {@literal @}Named("plugins")
6482*dc5640d1SHerbert Xue Plugin provideFooUrl(FooManager fm) { returm fm.getPlugin(); }
6483*dc5640d1SHerbert Xue
6484*dc5640d1SHerbert Xue {@literal @}ProvidesIntoMap
6485*dc5640d1SHerbert Xue {@literal @}StringMapKey("Bar")
6486*dc5640d1SHerbert Xue {@literal @}Named("urls")
6487*dc5640d1SHerbert Xue Plugin provideBarUrl(BarManager bm) { return bm.getPlugin(); }
6488*dc5640d1SHerbert Xue </pre>
6489*dc5640d1SHerbert Xue
6490*dc5640d1SHerbert Xue will add two items to the {@code @Named("urls") Map<String, Plugin>} map. The key 'Foo'
6491*dc5640d1SHerbert Xue will map to the provideFooUrl method, and the key 'Bar' will map to the provideBarUrl method.
6492*dc5640d1SHerbert Xue The values are bound as providers and will be evaluated at injection time.
6493*dc5640d1SHerbert Xue
6494*dc5640d1SHerbert Xue <p>Because the key is specified as an annotation, only Strings, Classes, enums, primitive
6495*dc5640d1SHerbert Xue types and annotation instances are supported as keys.
6496*dc5640d1SHerbert Xue
6497*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6498*dc5640d1SHerbert Xue @since 4.0]]>
6499*dc5640d1SHerbert Xue    </doc>
6500*dc5640d1SHerbert Xue  </class>
6501*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoMap -->
6502*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional -->
6503*dc5640d1SHerbert Xue  <class name="ProvidesIntoOptional"    abstract="true"
6504*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6505*dc5640d1SHerbert Xue    deprecated="not deprecated">
6506*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6507*dc5640d1SHerbert Xue    <doc>
6508*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6509*dc5640d1SHerbert Xue The method's return type and binding annotation determines what Optional this will
6510*dc5640d1SHerbert Xue contribute to. For example,
6511*dc5640d1SHerbert Xue
6512*dc5640d1SHerbert Xue <pre>
6513*dc5640d1SHerbert Xue {@literal @}ProvidesIntoOptional(DEFAULT)
6514*dc5640d1SHerbert Xue {@literal @}Named("url")
6515*dc5640d1SHerbert Xue String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6516*dc5640d1SHerbert Xue
6517*dc5640d1SHerbert Xue {@literal @}ProvidesIntoOptional(ACTUAL)
6518*dc5640d1SHerbert Xue {@literal @}Named("url")
6519*dc5640d1SHerbert Xue String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6520*dc5640d1SHerbert Xue </pre>
6521*dc5640d1SHerbert Xue
6522*dc5640d1SHerbert Xue will set the default value of {@code @Named("url") Optional<String>} to foo's URL,
6523*dc5640d1SHerbert Xue and then override it to bar's URL.
6524*dc5640d1SHerbert Xue
6525*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6526*dc5640d1SHerbert Xue @since 4.0]]>
6527*dc5640d1SHerbert Xue    </doc>
6528*dc5640d1SHerbert Xue  </class>
6529*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional -->
6530*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6531*dc5640d1SHerbert Xue  <class name="ProvidesIntoOptional.Type" extends="java.lang.Enum&lt;com.google.inject.multibindings.ProvidesIntoOptional.Type&gt;"
6532*dc5640d1SHerbert Xue    abstract="false"
6533*dc5640d1SHerbert Xue    static="true" final="true" visibility="public"
6534*dc5640d1SHerbert Xue    deprecated="not deprecated">
6535*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.multibindings.ProvidesIntoOptional.Type[]"
6536*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6537*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6538*dc5640d1SHerbert Xue      deprecated="not deprecated">
6539*dc5640d1SHerbert Xue    </method>
6540*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.multibindings.ProvidesIntoOptional.Type"
6541*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6542*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6543*dc5640d1SHerbert Xue      deprecated="not deprecated">
6544*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
6545*dc5640d1SHerbert Xue    </method>
6546*dc5640d1SHerbert Xue    <doc>
6547*dc5640d1SHerbert Xue    <![CDATA[@since 4.0]]>
6548*dc5640d1SHerbert Xue    </doc>
6549*dc5640d1SHerbert Xue  </class>
6550*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoOptional.Type -->
6551*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.ProvidesIntoSet -->
6552*dc5640d1SHerbert Xue  <class name="ProvidesIntoSet"    abstract="true"
6553*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6554*dc5640d1SHerbert Xue    deprecated="not deprecated">
6555*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6556*dc5640d1SHerbert Xue    <doc>
6557*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link Module} to add items to a {@link Multibinder}.
6558*dc5640d1SHerbert Xue The method's return type and binding annotation determines what Set this will
6559*dc5640d1SHerbert Xue contribute to. For example,
6560*dc5640d1SHerbert Xue
6561*dc5640d1SHerbert Xue <pre>
6562*dc5640d1SHerbert Xue {@literal @}ProvidesIntoSet
6563*dc5640d1SHerbert Xue {@literal @}Named("urls")
6564*dc5640d1SHerbert Xue String provideFooUrl(FooManager fm) { returm fm.getUrl(); }
6565*dc5640d1SHerbert Xue
6566*dc5640d1SHerbert Xue {@literal @}ProvidesIntoSet
6567*dc5640d1SHerbert Xue {@literal @}Named("urls")
6568*dc5640d1SHerbert Xue String provideBarUrl(BarManager bm) { return bm.getUrl(); }
6569*dc5640d1SHerbert Xue </pre>
6570*dc5640d1SHerbert Xue
6571*dc5640d1SHerbert Xue will add two items to the {@code @Named("urls") Set<String>} set. The items are bound as
6572*dc5640d1SHerbert Xue providers and will be evaluated at injection time.
6573*dc5640d1SHerbert Xue
6574*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
6575*dc5640d1SHerbert Xue @since 4.0]]>
6576*dc5640d1SHerbert Xue    </doc>
6577*dc5640d1SHerbert Xue  </class>
6578*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.ProvidesIntoSet -->
6579*dc5640d1SHerbert Xue  <!-- start class com.google.inject.multibindings.StringMapKey -->
6580*dc5640d1SHerbert Xue  <class name="StringMapKey"    abstract="true"
6581*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6582*dc5640d1SHerbert Xue    deprecated="not deprecated">
6583*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6584*dc5640d1SHerbert Xue    <doc>
6585*dc5640d1SHerbert Xue    <![CDATA[Allows {@literal @}{@link ProvidesIntoMap} to specify a string map key.
6586*dc5640d1SHerbert Xue
6587*dc5640d1SHerbert Xue @since 4.0]]>
6588*dc5640d1SHerbert Xue    </doc>
6589*dc5640d1SHerbert Xue  </class>
6590*dc5640d1SHerbert Xue  <!-- end class com.google.inject.multibindings.StringMapKey -->
6591*dc5640d1SHerbert Xue</package>
6592*dc5640d1SHerbert Xue<package name="com.google.inject.name">
6593*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Named -->
6594*dc5640d1SHerbert Xue  <class name="Named"    abstract="true"
6595*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6596*dc5640d1SHerbert Xue    deprecated="not deprecated">
6597*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6598*dc5640d1SHerbert Xue    <doc>
6599*dc5640d1SHerbert Xue    <![CDATA[Annotates named things.
6600*dc5640d1SHerbert Xue
6601*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6602*dc5640d1SHerbert Xue    </doc>
6603*dc5640d1SHerbert Xue  </class>
6604*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Named -->
6605*dc5640d1SHerbert Xue  <!-- start class com.google.inject.name.Names -->
6606*dc5640d1SHerbert Xue  <class name="Names" extends="java.lang.Object"
6607*dc5640d1SHerbert Xue    abstract="false"
6608*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6609*dc5640d1SHerbert Xue    deprecated="not deprecated">
6610*dc5640d1SHerbert Xue    <method name="named" return="com.google.inject.name.Named"
6611*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6612*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6613*dc5640d1SHerbert Xue      deprecated="not deprecated">
6614*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
6615*dc5640d1SHerbert Xue      <doc>
6616*dc5640d1SHerbert Xue      <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
6617*dc5640d1SHerbert Xue      </doc>
6618*dc5640d1SHerbert Xue    </method>
6619*dc5640d1SHerbert Xue    <method name="bindProperties"
6620*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6621*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6622*dc5640d1SHerbert Xue      deprecated="not deprecated">
6623*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6624*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
6625*dc5640d1SHerbert Xue      <doc>
6626*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
6627*dc5640d1SHerbert Xue {@code properties}.]]>
6628*dc5640d1SHerbert Xue      </doc>
6629*dc5640d1SHerbert Xue    </method>
6630*dc5640d1SHerbert Xue    <method name="bindProperties"
6631*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6632*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6633*dc5640d1SHerbert Xue      deprecated="not deprecated">
6634*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
6635*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Properties"/>
6636*dc5640d1SHerbert Xue      <doc>
6637*dc5640d1SHerbert Xue      <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
6638*dc5640d1SHerbert Xue method binds all properties including those inherited from
6639*dc5640d1SHerbert Xue {@link Properties#defaults defaults}.]]>
6640*dc5640d1SHerbert Xue      </doc>
6641*dc5640d1SHerbert Xue    </method>
6642*dc5640d1SHerbert Xue    <doc>
6643*dc5640d1SHerbert Xue    <![CDATA[Utility methods for use with {@code @}{@link Named}.
6644*dc5640d1SHerbert Xue
6645*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
6646*dc5640d1SHerbert Xue    </doc>
6647*dc5640d1SHerbert Xue  </class>
6648*dc5640d1SHerbert Xue  <!-- end class com.google.inject.name.Names -->
6649*dc5640d1SHerbert Xue</package>
6650*dc5640d1SHerbert Xue<package name="com.google.inject.persist">
6651*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistFilter -->
6652*dc5640d1SHerbert Xue  <class name="PersistFilter" extends="java.lang.Object"
6653*dc5640d1SHerbert Xue    abstract="false"
6654*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6655*dc5640d1SHerbert Xue    deprecated="not deprecated">
6656*dc5640d1SHerbert Xue    <implements name="javax.servlet.Filter"/>
6657*dc5640d1SHerbert Xue    <constructor name="PersistFilter" type="com.google.inject.persist.UnitOfWork, com.google.inject.persist.PersistService"
6658*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6659*dc5640d1SHerbert Xue      deprecated="not deprecated">
6660*dc5640d1SHerbert Xue    </constructor>
6661*dc5640d1SHerbert Xue    <method name="init"
6662*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6663*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6664*dc5640d1SHerbert Xue      deprecated="not deprecated">
6665*dc5640d1SHerbert Xue      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
6666*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
6667*dc5640d1SHerbert Xue    </method>
6668*dc5640d1SHerbert Xue    <method name="destroy"
6669*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6670*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6671*dc5640d1SHerbert Xue      deprecated="not deprecated">
6672*dc5640d1SHerbert Xue    </method>
6673*dc5640d1SHerbert Xue    <method name="doFilter"
6674*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6675*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6676*dc5640d1SHerbert Xue      deprecated="not deprecated">
6677*dc5640d1SHerbert Xue      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
6678*dc5640d1SHerbert Xue      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
6679*dc5640d1SHerbert Xue      <param name="filterChain" type="javax.servlet.FilterChain"/>
6680*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
6681*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
6682*dc5640d1SHerbert Xue    </method>
6683*dc5640d1SHerbert Xue    <doc>
6684*dc5640d1SHerbert Xue    <![CDATA[Apply this filter to enable the HTTP Request unit of work and to have
6685*dc5640d1SHerbert Xue guice-persist manage the lifecycle of active units of work.
6686*dc5640d1SHerbert Xue The filter automatically starts and stops the relevant {@link PersistService}
6687*dc5640d1SHerbert Xue upon {@link javax.servlet.Filter#init(javax.servlet.FilterConfig)} and
6688*dc5640d1SHerbert Xue {@link javax.servlet.Filter#destroy()} respectively.
6689*dc5640d1SHerbert Xue
6690*dc5640d1SHerbert Xue <p> To be able to use the open session-in-view pattern (i.e. work per request),
6691*dc5640d1SHerbert Xue register this filter <b>once</b> in your Guice {@code ServletModule}. It is
6692*dc5640d1SHerbert Xue important that you register this filter before any other filter.
6693*dc5640d1SHerbert Xue
6694*dc5640d1SHerbert Xue For multiple providers, you should register this filter once per provider, inside
6695*dc5640d1SHerbert Xue a private module for each persist module installed (this must be the same private
6696*dc5640d1SHerbert Xue module where the specific persist module is itself installed).
6697*dc5640d1SHerbert Xue
6698*dc5640d1SHerbert Xue <p>
6699*dc5640d1SHerbert Xue Example configuration:
6700*dc5640d1SHerbert Xue <pre>{@code
6701*dc5640d1SHerbert Xue  public class MyModule extends ServletModule {
6702*dc5640d1SHerbert Xue    public void configureServlets() {
6703*dc5640d1SHerbert Xue      filter("/*").through(PersistFilter.class);
6704*dc5640d1SHerbert Xue
6705*dc5640d1SHerbert Xue      serve("/index.html").with(MyHtmlServlet.class);
6706*dc5640d1SHerbert Xue      // Etc.
6707*dc5640d1SHerbert Xue    }
6708*dc5640d1SHerbert Xue  }
6709*dc5640d1SHerbert Xue }</pre>
6710*dc5640d1SHerbert Xue <p>
6711*dc5640d1SHerbert Xue This filter is thread safe and allows you to create injectors concurrently
6712*dc5640d1SHerbert Xue and deploy multiple guice-persist modules within the same injector, or even
6713*dc5640d1SHerbert Xue multiple injectors with persist modules withing the same JVM or web app.
6714*dc5640d1SHerbert Xue <p>
6715*dc5640d1SHerbert Xue This filter requires the Guice Servlet extension.
6716*dc5640d1SHerbert Xue
6717*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6718*dc5640d1SHerbert Xue    </doc>
6719*dc5640d1SHerbert Xue  </class>
6720*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistFilter -->
6721*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.PersistModule -->
6722*dc5640d1SHerbert Xue  <class name="PersistModule" extends="com.google.inject.AbstractModule"
6723*dc5640d1SHerbert Xue    abstract="true"
6724*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6725*dc5640d1SHerbert Xue    deprecated="not deprecated">
6726*dc5640d1SHerbert Xue    <constructor name="PersistModule"
6727*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6728*dc5640d1SHerbert Xue      deprecated="not deprecated">
6729*dc5640d1SHerbert Xue    </constructor>
6730*dc5640d1SHerbert Xue    <method name="configure"
6731*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6732*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
6733*dc5640d1SHerbert Xue      deprecated="not deprecated">
6734*dc5640d1SHerbert Xue    </method>
6735*dc5640d1SHerbert Xue    <method name="configurePersistence"
6736*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6737*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6738*dc5640d1SHerbert Xue      deprecated="not deprecated">
6739*dc5640d1SHerbert Xue    </method>
6740*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6741*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6742*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6743*dc5640d1SHerbert Xue      deprecated="not deprecated">
6744*dc5640d1SHerbert Xue    </method>
6745*dc5640d1SHerbert Xue    <doc>
6746*dc5640d1SHerbert Xue    <![CDATA[Install this module to add guice-persist library support for JPA persistence
6747*dc5640d1SHerbert Xue providers.
6748*dc5640d1SHerbert Xue
6749*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6750*dc5640d1SHerbert Xue    </doc>
6751*dc5640d1SHerbert Xue  </class>
6752*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.PersistModule -->
6753*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.PersistService -->
6754*dc5640d1SHerbert Xue  <interface name="PersistService"    abstract="true"
6755*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6756*dc5640d1SHerbert Xue    deprecated="not deprecated">
6757*dc5640d1SHerbert Xue    <method name="start"
6758*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6759*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6760*dc5640d1SHerbert Xue      deprecated="not deprecated">
6761*dc5640d1SHerbert Xue      <doc>
6762*dc5640d1SHerbert Xue      <![CDATA[Starts the underlying persistence engine and makes guice-persist ready for
6763*dc5640d1SHerbert Xue use. For instance, with JPA, it creates an EntityManagerFactory and may
6764*dc5640d1SHerbert Xue open connection pools. This method must be called by your code prior to
6765*dc5640d1SHerbert Xue using any guice-persist or JPA artifacts. If already started,
6766*dc5640d1SHerbert Xue calling this method does nothing, if already stopped, it also does
6767*dc5640d1SHerbert Xue nothing.]]>
6768*dc5640d1SHerbert Xue      </doc>
6769*dc5640d1SHerbert Xue    </method>
6770*dc5640d1SHerbert Xue    <method name="stop"
6771*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6772*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6773*dc5640d1SHerbert Xue      deprecated="not deprecated">
6774*dc5640d1SHerbert Xue      <doc>
6775*dc5640d1SHerbert Xue      <![CDATA[Stops the underlying persistence engine. For instance, with JPA, it
6776*dc5640d1SHerbert Xue closes the {@code EntityManagerFactory}. If already stopped, calling this
6777*dc5640d1SHerbert Xue method does nothing. If not yet started, it also does nothing.]]>
6778*dc5640d1SHerbert Xue      </doc>
6779*dc5640d1SHerbert Xue    </method>
6780*dc5640d1SHerbert Xue    <doc>
6781*dc5640d1SHerbert Xue    <![CDATA[Persistence provider service. Use this to manage the overall
6782*dc5640d1SHerbert Xue startup and stop of the persistence module(s).
6783*dc5640d1SHerbert Xue
6784*dc5640d1SHerbert Xue TODO(dhanji): Integrate with Service API when appropriate.
6785*dc5640d1SHerbert Xue
6786*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6787*dc5640d1SHerbert Xue    </doc>
6788*dc5640d1SHerbert Xue  </interface>
6789*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.PersistService -->
6790*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.Transactional -->
6791*dc5640d1SHerbert Xue  <class name="Transactional"    abstract="true"
6792*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6793*dc5640d1SHerbert Xue    deprecated="not deprecated">
6794*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6795*dc5640d1SHerbert Xue    <doc>
6796*dc5640d1SHerbert Xue    <![CDATA[<p> Any method or class marked with this annotation will be considered for transactionality.
6797*dc5640d1SHerbert Xue Consult the documentation on https://github.com/google/guice/wiki/GuicePersist for detailed
6798*dc5640d1SHerbert Xue semantics.
6799*dc5640d1SHerbert Xue Marking a method {@code @Transactional} will start a new transaction before the method
6800*dc5640d1SHerbert Xue executes and commit it after the method returns.
6801*dc5640d1SHerbert Xue <p>
6802*dc5640d1SHerbert Xue If the method throws an exception, the transaction will be rolled back <em>unless</em>
6803*dc5640d1SHerbert Xue you have specifically requested not to in the {@link #ignore()} clause.
6804*dc5640d1SHerbert Xue <p>
6805*dc5640d1SHerbert Xue Similarly, the set of exceptions that will trigger a rollback can be defined in
6806*dc5640d1SHerbert Xue the {@link #rollbackOn()} clause. By default, only unchecked exceptions trigger a
6807*dc5640d1SHerbert Xue rollback.
6808*dc5640d1SHerbert Xue
6809*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6810*dc5640d1SHerbert Xue    </doc>
6811*dc5640d1SHerbert Xue  </class>
6812*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.Transactional -->
6813*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.persist.UnitOfWork -->
6814*dc5640d1SHerbert Xue  <interface name="UnitOfWork"    abstract="true"
6815*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6816*dc5640d1SHerbert Xue    deprecated="not deprecated">
6817*dc5640d1SHerbert Xue    <method name="begin"
6818*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6819*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6820*dc5640d1SHerbert Xue      deprecated="not deprecated">
6821*dc5640d1SHerbert Xue      <doc>
6822*dc5640d1SHerbert Xue      <![CDATA[Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
6823*dc5640d1SHerbert Xue is already one open, the invocation will do nothing. In this way, you can define arbitrary
6824*dc5640d1SHerbert Xue units-of-work that nest within one another safely.
6825*dc5640d1SHerbert Xue
6826*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6827*dc5640d1SHerbert Xue      </doc>
6828*dc5640d1SHerbert Xue    </method>
6829*dc5640d1SHerbert Xue    <method name="end"
6830*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
6831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6832*dc5640d1SHerbert Xue      deprecated="not deprecated">
6833*dc5640d1SHerbert Xue      <doc>
6834*dc5640d1SHerbert Xue      <![CDATA[Declares an end to the current Unit of Work. Underneath, causes any open session to the data
6835*dc5640d1SHerbert Xue layer to close. If there is no Unit of work open, then the call returns silently. You can
6836*dc5640d1SHerbert Xue safely invoke end() repeatedly.
6837*dc5640d1SHerbert Xue <p>
6838*dc5640d1SHerbert Xue Transaction semantics are not affected.]]>
6839*dc5640d1SHerbert Xue      </doc>
6840*dc5640d1SHerbert Xue    </method>
6841*dc5640d1SHerbert Xue    <doc>
6842*dc5640d1SHerbert Xue    <![CDATA[This interface is used to gain manual control over the unit of work. This is mostly to do
6843*dc5640d1SHerbert Xue work in non-request, non-transactional threads. Or where more fine-grained control over the unit
6844*dc5640d1SHerbert Xue of work is required. Starting and ending a unit of work directly corresponds to opening and
6845*dc5640d1SHerbert Xue closing a {@code Session}, {@code EntityManager} or {@code ObjectContainer} respectively.
6846*dc5640d1SHerbert Xue <p> The
6847*dc5640d1SHerbert Xue Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
6848*dc5640d1SHerbert Xue end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
6849*dc5640d1SHerbert Xue behind thread-locality of Unit of Work semantics).
6850*dc5640d1SHerbert Xue
6851*dc5640d1SHerbert Xue <ul>
6852*dc5640d1SHerbert Xue   <li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
6853*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
6854*dc5640d1SHerbert Xue   <li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
6855*dc5640d1SHerbert Xue       background or bootstrap thread) is probably a good use case.</li>
6856*dc5640d1SHerbert Xue  </ul>
6857*dc5640d1SHerbert Xue
6858*dc5640d1SHerbert Xue @author Dhanji R. Prasanna (dhanji@gmail com)]]>
6859*dc5640d1SHerbert Xue    </doc>
6860*dc5640d1SHerbert Xue  </interface>
6861*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.persist.UnitOfWork -->
6862*dc5640d1SHerbert Xue</package>
6863*dc5640d1SHerbert Xue<package name="com.google.inject.persist.finder">
6864*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.DynamicFinder -->
6865*dc5640d1SHerbert Xue  <class name="DynamicFinder" extends="java.lang.Object"
6866*dc5640d1SHerbert Xue    abstract="false"
6867*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6868*dc5640d1SHerbert Xue    deprecated="not deprecated">
6869*dc5640d1SHerbert Xue    <constructor name="DynamicFinder" type="java.lang.reflect.Method"
6870*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6871*dc5640d1SHerbert Xue      deprecated="not deprecated">
6872*dc5640d1SHerbert Xue    </constructor>
6873*dc5640d1SHerbert Xue    <method name="from" return="com.google.inject.persist.finder.DynamicFinder"
6874*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6875*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
6876*dc5640d1SHerbert Xue      deprecated="not deprecated">
6877*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
6878*dc5640d1SHerbert Xue      <doc>
6879*dc5640d1SHerbert Xue      <![CDATA[Returns some metadata if the method is annotated {@code @Finder} or null.
6880*dc5640d1SHerbert Xue
6881*dc5640d1SHerbert Xue @param method a method you want to test as a dynamic finder]]>
6882*dc5640d1SHerbert Xue      </doc>
6883*dc5640d1SHerbert Xue    </method>
6884*dc5640d1SHerbert Xue    <method name="metadata" return="com.google.inject.persist.finder.Finder"
6885*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6887*dc5640d1SHerbert Xue      deprecated="not deprecated">
6888*dc5640d1SHerbert Xue    </method>
6889*dc5640d1SHerbert Xue    <doc>
6890*dc5640d1SHerbert Xue    <![CDATA[Utility that helps you introspect dynamic finder methods.
6891*dc5640d1SHerbert Xue
6892*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6893*dc5640d1SHerbert Xue    </doc>
6894*dc5640d1SHerbert Xue  </class>
6895*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.DynamicFinder -->
6896*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.Finder -->
6897*dc5640d1SHerbert Xue  <class name="Finder"    abstract="true"
6898*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6899*dc5640d1SHerbert Xue    deprecated="not deprecated">
6900*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6901*dc5640d1SHerbert Xue    <doc>
6902*dc5640d1SHerbert Xue    <![CDATA[Marks a method stub as a dynamic finder. The method is intercepted and replaced with the
6903*dc5640d1SHerbert Xue specified JPAQL query. Provides result auto-boxing and automatic parameter binding.
6904*dc5640d1SHerbert Xue
6905*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6906*dc5640d1SHerbert Xue    </doc>
6907*dc5640d1SHerbert Xue  </class>
6908*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.Finder -->
6909*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.FirstResult -->
6910*dc5640d1SHerbert Xue  <class name="FirstResult"    abstract="true"
6911*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6912*dc5640d1SHerbert Xue    deprecated="not deprecated">
6913*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6914*dc5640d1SHerbert Xue    <doc>
6915*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6916*dc5640d1SHerbert Xue the index of the first result in the result set you are interested in.
6917*dc5640d1SHerbert Xue Useful for paging result sets. Complemented by {@link MaxResults}.
6918*dc5640d1SHerbert Xue
6919*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6920*dc5640d1SHerbert Xue    </doc>
6921*dc5640d1SHerbert Xue  </class>
6922*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.FirstResult -->
6923*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.finder.MaxResults -->
6924*dc5640d1SHerbert Xue  <class name="MaxResults"    abstract="true"
6925*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6926*dc5640d1SHerbert Xue    deprecated="not deprecated">
6927*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
6928*dc5640d1SHerbert Xue    <doc>
6929*dc5640d1SHerbert Xue    <![CDATA[Annotate any dynamic finder method's integer argument with this to pass in
6930*dc5640d1SHerbert Xue the maximum size of returned result window. Usefule for paging result sets.
6931*dc5640d1SHerbert Xue Complement of {@link FirstResult}.
6932*dc5640d1SHerbert Xue
6933*dc5640d1SHerbert Xue @author Dhanji R. Prasanna ([email protected])]]>
6934*dc5640d1SHerbert Xue    </doc>
6935*dc5640d1SHerbert Xue  </class>
6936*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.finder.MaxResults -->
6937*dc5640d1SHerbert Xue</package>
6938*dc5640d1SHerbert Xue<package name="com.google.inject.persist.jpa">
6939*dc5640d1SHerbert Xue  <!-- start class com.google.inject.persist.jpa.JpaPersistModule -->
6940*dc5640d1SHerbert Xue  <class name="JpaPersistModule" extends="com.google.inject.persist.PersistModule"
6941*dc5640d1SHerbert Xue    abstract="false"
6942*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
6943*dc5640d1SHerbert Xue    deprecated="not deprecated">
6944*dc5640d1SHerbert Xue    <constructor name="JpaPersistModule" type="java.lang.String"
6945*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6946*dc5640d1SHerbert Xue      deprecated="not deprecated">
6947*dc5640d1SHerbert Xue    </constructor>
6948*dc5640d1SHerbert Xue    <method name="configurePersistence"
6949*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6950*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6951*dc5640d1SHerbert Xue      deprecated="not deprecated">
6952*dc5640d1SHerbert Xue    </method>
6953*dc5640d1SHerbert Xue    <method name="getTransactionInterceptor" return="org.aopalliance.intercept.MethodInterceptor"
6954*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6955*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
6956*dc5640d1SHerbert Xue      deprecated="not deprecated">
6957*dc5640d1SHerbert Xue    </method>
6958*dc5640d1SHerbert Xue    <method name="properties" return="com.google.inject.persist.jpa.JpaPersistModule"
6959*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6960*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6961*dc5640d1SHerbert Xue      deprecated="not deprecated">
6962*dc5640d1SHerbert Xue      <param name="properties" type="java.util.Map&lt;?, ?&gt;"/>
6963*dc5640d1SHerbert Xue      <doc>
6964*dc5640d1SHerbert Xue      <![CDATA[Configures the JPA persistence provider with a set of properties.
6965*dc5640d1SHerbert Xue
6966*dc5640d1SHerbert Xue @param properties A set of name value pairs that configure a JPA persistence
6967*dc5640d1SHerbert Xue     provider as per the specification.
6968*dc5640d1SHerbert Xue @since 4.0 (since 3.0 with a parameter type of {@code java.util.Properties})]]>
6969*dc5640d1SHerbert Xue      </doc>
6970*dc5640d1SHerbert Xue    </method>
6971*dc5640d1SHerbert Xue    <method name="addFinder" return="com.google.inject.persist.jpa.JpaPersistModule"
6972*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
6973*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6974*dc5640d1SHerbert Xue      deprecated="not deprecated">
6975*dc5640d1SHerbert Xue      <param name="iface" type="java.lang.Class&lt;T&gt;"/>
6976*dc5640d1SHerbert Xue      <doc>
6977*dc5640d1SHerbert Xue      <![CDATA[Adds an interface to this module to use as a dynamic finder.
6978*dc5640d1SHerbert Xue
6979*dc5640d1SHerbert Xue @param iface Any interface type whose methods are all dynamic finders.]]>
6980*dc5640d1SHerbert Xue      </doc>
6981*dc5640d1SHerbert Xue    </method>
6982*dc5640d1SHerbert Xue    <doc>
6983*dc5640d1SHerbert Xue    <![CDATA[JPA provider for guice persist.
6984*dc5640d1SHerbert Xue
6985*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
6986*dc5640d1SHerbert Xue    </doc>
6987*dc5640d1SHerbert Xue  </class>
6988*dc5640d1SHerbert Xue  <!-- end class com.google.inject.persist.jpa.JpaPersistModule -->
6989*dc5640d1SHerbert Xue</package>
6990*dc5640d1SHerbert Xue<package name="com.google.inject.servlet">
6991*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceFilter -->
6992*dc5640d1SHerbert Xue  <class name="GuiceFilter" extends="java.lang.Object"
6993*dc5640d1SHerbert Xue    abstract="false"
6994*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
6995*dc5640d1SHerbert Xue    deprecated="not deprecated">
6996*dc5640d1SHerbert Xue    <implements name="javax.servlet.Filter"/>
6997*dc5640d1SHerbert Xue    <constructor name="GuiceFilter"
6998*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
6999*dc5640d1SHerbert Xue      deprecated="not deprecated">
7000*dc5640d1SHerbert Xue    </constructor>
7001*dc5640d1SHerbert Xue    <method name="doFilter"
7002*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7003*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7004*dc5640d1SHerbert Xue      deprecated="not deprecated">
7005*dc5640d1SHerbert Xue      <param name="servletRequest" type="javax.servlet.ServletRequest"/>
7006*dc5640d1SHerbert Xue      <param name="servletResponse" type="javax.servlet.ServletResponse"/>
7007*dc5640d1SHerbert Xue      <param name="filterChain" type="javax.servlet.FilterChain"/>
7008*dc5640d1SHerbert Xue      <exception name="IOException" type="java.io.IOException"/>
7009*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
7010*dc5640d1SHerbert Xue    </method>
7011*dc5640d1SHerbert Xue    <method name="init"
7012*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7013*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7014*dc5640d1SHerbert Xue      deprecated="not deprecated">
7015*dc5640d1SHerbert Xue      <param name="filterConfig" type="javax.servlet.FilterConfig"/>
7016*dc5640d1SHerbert Xue      <exception name="ServletException" type="javax.servlet.ServletException"/>
7017*dc5640d1SHerbert Xue    </method>
7018*dc5640d1SHerbert Xue    <method name="destroy"
7019*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7020*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7021*dc5640d1SHerbert Xue      deprecated="not deprecated">
7022*dc5640d1SHerbert Xue    </method>
7023*dc5640d1SHerbert Xue    <doc>
7024*dc5640d1SHerbert Xue    <![CDATA[<p>
7025*dc5640d1SHerbert Xue Apply this filter in web.xml above all other filters (typically), to all requests where you plan
7026*dc5640d1SHerbert Xue  to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
7027*dc5640d1SHerbert Xue  and servlets:
7028*dc5640d1SHerbert Xue  <pre>
7029*dc5640d1SHerbert Xue  &lt;filter&gt;
7030*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7031*dc5640d1SHerbert Xue    &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
7032*dc5640d1SHerbert Xue  &lt;/filter&gt;
7033*dc5640d1SHerbert Xue
7034*dc5640d1SHerbert Xue  &lt;filter-mapping&gt;
7035*dc5640d1SHerbert Xue    &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
7036*dc5640d1SHerbert Xue    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
7037*dc5640d1SHerbert Xue  &lt;/filter-mapping&gt;
7038*dc5640d1SHerbert Xue  </pre>
7039*dc5640d1SHerbert Xue
7040*dc5640d1SHerbert Xue This filter must appear before every filter that makes use of Guice injection or servlet
7041*dc5640d1SHerbert Xue scopes functionality. Typically, you will only register this filter in web.xml and register
7042*dc5640d1SHerbert Xue any other filters (and servlets) using a {@link ServletModule}.
7043*dc5640d1SHerbert Xue
7044*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7045*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
7046*dc5640d1SHerbert Xue    </doc>
7047*dc5640d1SHerbert Xue  </class>
7048*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceFilter -->
7049*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
7050*dc5640d1SHerbert Xue  <class name="GuiceServletContextListener" extends="java.lang.Object"
7051*dc5640d1SHerbert Xue    abstract="true"
7052*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7053*dc5640d1SHerbert Xue    deprecated="not deprecated">
7054*dc5640d1SHerbert Xue    <implements name="javax.servlet.ServletContextListener"/>
7055*dc5640d1SHerbert Xue    <constructor name="GuiceServletContextListener"
7056*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7057*dc5640d1SHerbert Xue      deprecated="not deprecated">
7058*dc5640d1SHerbert Xue    </constructor>
7059*dc5640d1SHerbert Xue    <method name="contextInitialized"
7060*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7061*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7062*dc5640d1SHerbert Xue      deprecated="not deprecated">
7063*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7064*dc5640d1SHerbert Xue    </method>
7065*dc5640d1SHerbert Xue    <method name="contextDestroyed"
7066*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7067*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7068*dc5640d1SHerbert Xue      deprecated="not deprecated">
7069*dc5640d1SHerbert Xue      <param name="servletContextEvent" type="javax.servlet.ServletContextEvent"/>
7070*dc5640d1SHerbert Xue    </method>
7071*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
7072*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7073*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7074*dc5640d1SHerbert Xue      deprecated="not deprecated">
7075*dc5640d1SHerbert Xue      <doc>
7076*dc5640d1SHerbert Xue      <![CDATA[Override this method to create (or otherwise obtain a reference to) your
7077*dc5640d1SHerbert Xue injector.]]>
7078*dc5640d1SHerbert Xue      </doc>
7079*dc5640d1SHerbert Xue    </method>
7080*dc5640d1SHerbert Xue    <doc>
7081*dc5640d1SHerbert Xue    <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
7082*dc5640d1SHerbert Xue class as a logical place to create and configure your injector. This will ensure the injector
7083*dc5640d1SHerbert Xue is created when the web application is deployed.
7084*dc5640d1SHerbert Xue
7085*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
7086*dc5640d1SHerbert Xue @since 2.0]]>
7087*dc5640d1SHerbert Xue    </doc>
7088*dc5640d1SHerbert Xue  </class>
7089*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
7090*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceFilterBinding -->
7091*dc5640d1SHerbert Xue  <interface name="InstanceFilterBinding"    abstract="true"
7092*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7093*dc5640d1SHerbert Xue    deprecated="not deprecated">
7094*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7095*dc5640d1SHerbert Xue    <method name="getFilterInstance" return="javax.servlet.Filter"
7096*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7097*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7098*dc5640d1SHerbert Xue      deprecated="not deprecated">
7099*dc5640d1SHerbert Xue      <doc>
7100*dc5640d1SHerbert Xue      <![CDATA[Returns the filter instance that will be used.]]>
7101*dc5640d1SHerbert Xue      </doc>
7102*dc5640d1SHerbert Xue    </method>
7103*dc5640d1SHerbert Xue    <doc>
7104*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a filter.
7105*dc5640d1SHerbert Xue
7106*dc5640d1SHerbert Xue @author [email protected]
7107*dc5640d1SHerbert Xue @since 3.0]]>
7108*dc5640d1SHerbert Xue    </doc>
7109*dc5640d1SHerbert Xue  </interface>
7110*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceFilterBinding -->
7111*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.InstanceServletBinding -->
7112*dc5640d1SHerbert Xue  <interface name="InstanceServletBinding"    abstract="true"
7113*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7114*dc5640d1SHerbert Xue    deprecated="not deprecated">
7115*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7116*dc5640d1SHerbert Xue    <method name="getServletInstance" return="javax.servlet.http.HttpServlet"
7117*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7118*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7119*dc5640d1SHerbert Xue      deprecated="not deprecated">
7120*dc5640d1SHerbert Xue      <doc>
7121*dc5640d1SHerbert Xue      <![CDATA[Returns the servlet instance that will be used.]]>
7122*dc5640d1SHerbert Xue      </doc>
7123*dc5640d1SHerbert Xue    </method>
7124*dc5640d1SHerbert Xue    <doc>
7125*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance of a servlet.
7126*dc5640d1SHerbert Xue
7127*dc5640d1SHerbert Xue @author [email protected]
7128*dc5640d1SHerbert Xue @since 3.0]]>
7129*dc5640d1SHerbert Xue    </doc>
7130*dc5640d1SHerbert Xue  </interface>
7131*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.InstanceServletBinding -->
7132*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedFilterBinding -->
7133*dc5640d1SHerbert Xue  <interface name="LinkedFilterBinding"    abstract="true"
7134*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7135*dc5640d1SHerbert Xue    deprecated="not deprecated">
7136*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7137*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"
7138*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7139*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7140*dc5640d1SHerbert Xue      deprecated="not deprecated">
7141*dc5640d1SHerbert Xue      <doc>
7142*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the filter instance.]]>
7143*dc5640d1SHerbert Xue      </doc>
7144*dc5640d1SHerbert Xue    </method>
7145*dc5640d1SHerbert Xue    <doc>
7146*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a filter.
7147*dc5640d1SHerbert Xue
7148*dc5640d1SHerbert Xue @author [email protected]
7149*dc5640d1SHerbert Xue @since 3.0]]>
7150*dc5640d1SHerbert Xue    </doc>
7151*dc5640d1SHerbert Xue  </interface>
7152*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedFilterBinding -->
7153*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.LinkedServletBinding -->
7154*dc5640d1SHerbert Xue  <interface name="LinkedServletBinding"    abstract="true"
7155*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7156*dc5640d1SHerbert Xue    deprecated="not deprecated">
7157*dc5640d1SHerbert Xue    <implements name="com.google.inject.servlet.ServletModuleBinding"/>
7158*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"
7159*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7160*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7161*dc5640d1SHerbert Xue      deprecated="not deprecated">
7162*dc5640d1SHerbert Xue      <doc>
7163*dc5640d1SHerbert Xue      <![CDATA[Returns the key used to lookup the servlet instance.]]>
7164*dc5640d1SHerbert Xue      </doc>
7165*dc5640d1SHerbert Xue    </method>
7166*dc5640d1SHerbert Xue    <doc>
7167*dc5640d1SHerbert Xue    <![CDATA[A linked binding to a servlet.
7168*dc5640d1SHerbert Xue
7169*dc5640d1SHerbert Xue @author [email protected]
7170*dc5640d1SHerbert Xue @since 3.0]]>
7171*dc5640d1SHerbert Xue    </doc>
7172*dc5640d1SHerbert Xue  </interface>
7173*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.LinkedServletBinding -->
7174*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestParameters -->
7175*dc5640d1SHerbert Xue  <class name="RequestParameters"    abstract="true"
7176*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7177*dc5640d1SHerbert Xue    deprecated="not deprecated">
7178*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7179*dc5640d1SHerbert Xue    <doc>
7180*dc5640d1SHerbert Xue    <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
7181*dc5640d1SHerbert Xue when you want the HTTP request parameter map to be injected.
7182*dc5640d1SHerbert Xue
7183*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7184*dc5640d1SHerbert Xue    </doc>
7185*dc5640d1SHerbert Xue  </class>
7186*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestParameters -->
7187*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.RequestScoped -->
7188*dc5640d1SHerbert Xue  <class name="RequestScoped"    abstract="true"
7189*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7190*dc5640d1SHerbert Xue    deprecated="not deprecated">
7191*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7192*dc5640d1SHerbert Xue    <doc>
7193*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per request.
7194*dc5640d1SHerbert Xue
7195*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7196*dc5640d1SHerbert Xue    </doc>
7197*dc5640d1SHerbert Xue  </class>
7198*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.RequestScoped -->
7199*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ScopingException -->
7200*dc5640d1SHerbert Xue  <class name="ScopingException" extends="java.lang.IllegalStateException"
7201*dc5640d1SHerbert Xue    abstract="false"
7202*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7203*dc5640d1SHerbert Xue    deprecated="not deprecated">
7204*dc5640d1SHerbert Xue    <constructor name="ScopingException" type="java.lang.String"
7205*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7206*dc5640d1SHerbert Xue      deprecated="not deprecated">
7207*dc5640d1SHerbert Xue    </constructor>
7208*dc5640d1SHerbert Xue    <doc>
7209*dc5640d1SHerbert Xue    <![CDATA[Exception thrown when there was a failure entering request scope.
7210*dc5640d1SHerbert Xue
7211*dc5640d1SHerbert Xue @author Chris Nokleberg
7212*dc5640d1SHerbert Xue @since 4.0]]>
7213*dc5640d1SHerbert Xue    </doc>
7214*dc5640d1SHerbert Xue  </class>
7215*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ScopingException -->
7216*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ScopingOnly -->
7217*dc5640d1SHerbert Xue  <class name="ScopingOnly"    abstract="true"
7218*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7219*dc5640d1SHerbert Xue    deprecated="not deprecated">
7220*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7221*dc5640d1SHerbert Xue    <doc>
7222*dc5640d1SHerbert Xue    <![CDATA[Annotates a {@link GuiceFilter} that provides scope functionality, but
7223*dc5640d1SHerbert Xue doesn't dispatch to {@link ServletModule} bound servlets or filters.
7224*dc5640d1SHerbert Xue
7225*dc5640d1SHerbert Xue @author [email protected] (Isaac Shum)
7226*dc5640d1SHerbert Xue @since 4.0]]>
7227*dc5640d1SHerbert Xue    </doc>
7228*dc5640d1SHerbert Xue  </class>
7229*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ScopingOnly -->
7230*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletModule -->
7231*dc5640d1SHerbert Xue  <class name="ServletModule" extends="com.google.inject.AbstractModule"
7232*dc5640d1SHerbert Xue    abstract="false"
7233*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7234*dc5640d1SHerbert Xue    deprecated="not deprecated">
7235*dc5640d1SHerbert Xue    <constructor name="ServletModule"
7236*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7237*dc5640d1SHerbert Xue      deprecated="not deprecated">
7238*dc5640d1SHerbert Xue    </constructor>
7239*dc5640d1SHerbert Xue    <method name="configure"
7240*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7241*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7242*dc5640d1SHerbert Xue      deprecated="not deprecated">
7243*dc5640d1SHerbert Xue    </method>
7244*dc5640d1SHerbert Xue    <method name="configureServlets"
7245*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7246*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
7247*dc5640d1SHerbert Xue      deprecated="not deprecated">
7248*dc5640d1SHerbert Xue      <doc>
7249*dc5640d1SHerbert Xue      <![CDATA[<h3>Servlet Mapping EDSL</h3>
7250*dc5640d1SHerbert Xue
7251*dc5640d1SHerbert Xue <p> Part of the EDSL builder language for configuring servlets
7252*dc5640d1SHerbert Xue and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
7253*dc5640d1SHerbert Xue Filters and servlets are configured here using simple java method calls. Here is a typical
7254*dc5640d1SHerbert Xue example of registering a filter when creating your Guice injector:
7255*dc5640d1SHerbert Xue
7256*dc5640d1SHerbert Xue <pre>
7257*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
7258*dc5640d1SHerbert Xue
7259*dc5640d1SHerbert Xue     {@literal @}Override
7260*dc5640d1SHerbert Xue     protected void configureServlets() {
7261*dc5640d1SHerbert Xue       <b>serve("*.html").with(MyServlet.class)</b>
7262*dc5640d1SHerbert Xue     }
7263*dc5640d1SHerbert Xue   }
7264*dc5640d1SHerbert Xue </pre>
7265*dc5640d1SHerbert Xue
7266*dc5640d1SHerbert Xue This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
7267*dc5640d1SHerbert Xue any web pages ending in {@code .html}. You can also use a path-style syntax to register
7268*dc5640d1SHerbert Xue servlets:
7269*dc5640d1SHerbert Xue
7270*dc5640d1SHerbert Xue <pre>
7271*dc5640d1SHerbert Xue       <b>serve("/my/*").with(MyServlet.class)</b>
7272*dc5640d1SHerbert Xue </pre>
7273*dc5640d1SHerbert Xue
7274*dc5640d1SHerbert Xue Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
7275*dc5640d1SHerbert Xue directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
7276*dc5640d1SHerbert Xue your module. Mapping a servlet that is bound under any other scope is an error.
7277*dc5640d1SHerbert Xue
7278*dc5640d1SHerbert Xue <p>
7279*dc5640d1SHerbert Xue <h4>Dispatch Order</h4>
7280*dc5640d1SHerbert Xue You are free to register as many servlets and filters as you like this way. They will
7281*dc5640d1SHerbert Xue be compared and dispatched in the order in which the filter methods are called:
7282*dc5640d1SHerbert Xue
7283*dc5640d1SHerbert Xue <pre>
7284*dc5640d1SHerbert Xue
7285*dc5640d1SHerbert Xue   Guice.createInjector(..., new ServletModule() {
7286*dc5640d1SHerbert Xue
7287*dc5640d1SHerbert Xue     {@literal @}Override
7288*dc5640d1SHerbert Xue     protected void configureServlets() {
7289*dc5640d1SHerbert Xue       filter("/*").through(MyFilter.class);
7290*dc5640d1SHerbert Xue       filter("*.css").through(MyCssFilter.class);
7291*dc5640d1SHerbert Xue       filter("*.jpg").through(new MyJpgFilter());
7292*dc5640d1SHerbert Xue       // etc..
7293*dc5640d1SHerbert Xue
7294*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
7295*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
7296*dc5640d1SHerbert Xue       serve("*.jpg").with(new MyServlet());
7297*dc5640d1SHerbert Xue       // etc..
7298*dc5640d1SHerbert Xue      }
7299*dc5640d1SHerbert Xue    }
7300*dc5640d1SHerbert Xue </pre>
7301*dc5640d1SHerbert Xue This will traverse down the list of rules in lexical order. For example, a url
7302*dc5640d1SHerbert Xue  "{@code /my/file.js}" (after it runs through the matching filters) will first
7303*dc5640d1SHerbert Xue  be compared against the servlet mapping:
7304*dc5640d1SHerbert Xue
7305*dc5640d1SHerbert Xue <pre>
7306*dc5640d1SHerbert Xue       serve("*.html").with(MyServlet.class);
7307*dc5640d1SHerbert Xue </pre>
7308*dc5640d1SHerbert Xue And failing that, it will descend to the next servlet mapping:
7309*dc5640d1SHerbert Xue
7310*dc5640d1SHerbert Xue <pre>
7311*dc5640d1SHerbert Xue       serve("/my/*").with(MyServlet.class);
7312*dc5640d1SHerbert Xue </pre>
7313*dc5640d1SHerbert Xue
7314*dc5640d1SHerbert Xue Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
7315*dc5640d1SHerbert Xue two mapping rules can also be written in more compact form using varargs syntax:
7316*dc5640d1SHerbert Xue
7317*dc5640d1SHerbert Xue <pre>
7318*dc5640d1SHerbert Xue       serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
7319*dc5640d1SHerbert Xue </pre>
7320*dc5640d1SHerbert Xue
7321*dc5640d1SHerbert Xue This way you can map several URI patterns to the same servlet. A similar syntax is
7322*dc5640d1SHerbert Xue also available for filter mappings.
7323*dc5640d1SHerbert Xue
7324*dc5640d1SHerbert Xue <p>
7325*dc5640d1SHerbert Xue <h4>Regular Expressions</h4>
7326*dc5640d1SHerbert Xue You can also map servlets (or filters) to URIs using regular expressions:
7327*dc5640d1SHerbert Xue <pre>
7328*dc5640d1SHerbert Xue    <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
7329*dc5640d1SHerbert Xue </pre>
7330*dc5640d1SHerbert Xue
7331*dc5640d1SHerbert Xue This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
7332*dc5640d1SHerbert Xue <ul>
7333*dc5640d1SHerbert Xue <li>http://www.google.com/ajax.html</li>
7334*dc5640d1SHerbert Xue <li>http://www.google.com/content/ajax/index</li>
7335*dc5640d1SHerbert Xue <li>http://www.google.com/it/is_totally_ajaxian</li>
7336*dc5640d1SHerbert Xue </ul>
7337*dc5640d1SHerbert Xue
7338*dc5640d1SHerbert Xue
7339*dc5640d1SHerbert Xue <h3>Initialization Parameters</h3>
7340*dc5640d1SHerbert Xue
7341*dc5640d1SHerbert Xue Servlets (and filters) allow you to pass in init params
7342*dc5640d1SHerbert Xue using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
7343*dc5640d1SHerbert Xue Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
7344*dc5640d1SHerbert Xue name/value pairs. For example, to initialize {@code MyServlet} with two parameters
7345*dc5640d1SHerbert Xue ({@code name="Dhanji", site="google.com"}) you could write:
7346*dc5640d1SHerbert Xue
7347*dc5640d1SHerbert Xue <pre>
7348*dc5640d1SHerbert Xue  Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
7349*dc5640d1SHerbert Xue  params.put("name", "Dhanji");
7350*dc5640d1SHerbert Xue  params.put("site", "google.com");
7351*dc5640d1SHerbert Xue
7352*dc5640d1SHerbert Xue  ...
7353*dc5640d1SHerbert Xue      serve("/*").with(MyServlet.class, <b>params</b>)
7354*dc5640d1SHerbert Xue </pre>
7355*dc5640d1SHerbert Xue
7356*dc5640d1SHerbert Xue <p>
7357*dc5640d1SHerbert Xue <h3>Binding Keys</h3>
7358*dc5640d1SHerbert Xue
7359*dc5640d1SHerbert Xue You can also bind keys rather than classes. This lets you hide
7360*dc5640d1SHerbert Xue implementations with package-local visbility and expose them using
7361*dc5640d1SHerbert Xue only a Guice module and an annotation:
7362*dc5640d1SHerbert Xue
7363*dc5640d1SHerbert Xue <pre>
7364*dc5640d1SHerbert Xue  ...
7365*dc5640d1SHerbert Xue      filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
7366*dc5640d1SHerbert Xue </pre>
7367*dc5640d1SHerbert Xue
7368*dc5640d1SHerbert Xue Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
7369*dc5640d1SHerbert Xue custom binding annotation. Elsewhere (in one of your own modules) you can bind this
7370*dc5640d1SHerbert Xue filter's implementation:
7371*dc5640d1SHerbert Xue
7372*dc5640d1SHerbert Xue <pre>
7373*dc5640d1SHerbert Xue   bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
7374*dc5640d1SHerbert Xue </pre>
7375*dc5640d1SHerbert Xue
7376*dc5640d1SHerbert Xue See {@link com.google.inject.Binder} for more information on binding syntax.
7377*dc5640d1SHerbert Xue
7378*dc5640d1SHerbert Xue <p>
7379*dc5640d1SHerbert Xue <h3>Multiple Modules</h3>
7380*dc5640d1SHerbert Xue
7381*dc5640d1SHerbert Xue It is sometimes useful to capture servlet and filter mappings from multiple different
7382*dc5640d1SHerbert Xue modules. This is essential if you want to package and offer drop-in Guice plugins that
7383*dc5640d1SHerbert Xue provide servlet functionality.
7384*dc5640d1SHerbert Xue
7385*dc5640d1SHerbert Xue <p>
7386*dc5640d1SHerbert Xue Guice Servlet allows you to register several instances of {@code ServletModule} to your
7387*dc5640d1SHerbert Xue injector. The order in which these modules are installed determines the dispatch order
7388*dc5640d1SHerbert Xue of filters and the precedence order of servlets. For example, if you had two servlet modules,
7389*dc5640d1SHerbert Xue {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
7390*dc5640d1SHerbert Xue to the same URI pattern, {@code "/*"}:
7391*dc5640d1SHerbert Xue
7392*dc5640d1SHerbert Xue <p>
7393*dc5640d1SHerbert Xue In {@code RpcModule}:
7394*dc5640d1SHerbert Xue <pre>
7395*dc5640d1SHerbert Xue     filter("/*").through(RpcFilter.class);
7396*dc5640d1SHerbert Xue </pre>
7397*dc5640d1SHerbert Xue
7398*dc5640d1SHerbert Xue In {@code WebServiceModule}:
7399*dc5640d1SHerbert Xue <pre>
7400*dc5640d1SHerbert Xue     filter("/*").through(WebServiceFilter.class);
7401*dc5640d1SHerbert Xue </pre>
7402*dc5640d1SHerbert Xue
7403*dc5640d1SHerbert Xue Then the order in which these filters are dispatched is determined by the order in which
7404*dc5640d1SHerbert Xue the modules are installed:
7405*dc5640d1SHerbert Xue
7406*dc5640d1SHerbert Xue <pre>
7407*dc5640d1SHerbert Xue   <b>install(new WebServiceModule());</b>
7408*dc5640d1SHerbert Xue   install(new RpcModule());
7409*dc5640d1SHerbert Xue </pre>
7410*dc5640d1SHerbert Xue
7411*dc5640d1SHerbert Xue In the case shown above {@code WebServiceFilter} will run first.
7412*dc5640d1SHerbert Xue
7413*dc5640d1SHerbert Xue @since 2.0]]>
7414*dc5640d1SHerbert Xue      </doc>
7415*dc5640d1SHerbert Xue    </method>
7416*dc5640d1SHerbert Xue    <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7417*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7418*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7419*dc5640d1SHerbert Xue      deprecated="not deprecated">
7420*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
7421*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
7422*dc5640d1SHerbert Xue      <doc>
7423*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7424*dc5640d1SHerbert Xue @since 2.0]]>
7425*dc5640d1SHerbert Xue      </doc>
7426*dc5640d1SHerbert Xue    </method>
7427*dc5640d1SHerbert Xue    <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
7428*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7429*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7430*dc5640d1SHerbert Xue      deprecated="not deprecated">
7431*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
7432*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
7433*dc5640d1SHerbert Xue      <doc>
7434*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
7435*dc5640d1SHerbert Xue @since 2.0]]>
7436*dc5640d1SHerbert Xue      </doc>
7437*dc5640d1SHerbert Xue    </method>
7438*dc5640d1SHerbert Xue    <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7439*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7440*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7441*dc5640d1SHerbert Xue      deprecated="not deprecated">
7442*dc5640d1SHerbert Xue      <param name="urlPattern" type="java.lang.String"/>
7443*dc5640d1SHerbert Xue      <param name="morePatterns" type="java.lang.String[]"/>
7444*dc5640d1SHerbert Xue      <doc>
7445*dc5640d1SHerbert Xue      <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
7446*dc5640d1SHerbert Xue @since 2.0]]>
7447*dc5640d1SHerbert Xue      </doc>
7448*dc5640d1SHerbert Xue    </method>
7449*dc5640d1SHerbert Xue    <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
7450*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7451*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7452*dc5640d1SHerbert Xue      deprecated="not deprecated">
7453*dc5640d1SHerbert Xue      <param name="regex" type="java.lang.String"/>
7454*dc5640d1SHerbert Xue      <param name="regexes" type="java.lang.String[]"/>
7455*dc5640d1SHerbert Xue      <doc>
7456*dc5640d1SHerbert Xue      <![CDATA[@param regex Any Java-style regular expression.
7457*dc5640d1SHerbert Xue @since 2.0]]>
7458*dc5640d1SHerbert Xue      </doc>
7459*dc5640d1SHerbert Xue    </method>
7460*dc5640d1SHerbert Xue    <method name="getServletContext" return="javax.servlet.ServletContext"
7461*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7462*dc5640d1SHerbert Xue      static="false" final="true" visibility="protected"
7463*dc5640d1SHerbert Xue      deprecated="not deprecated">
7464*dc5640d1SHerbert Xue      <doc>
7465*dc5640d1SHerbert Xue      <![CDATA[This method only works if you are using the {@linkplain GuiceServletContextListener} to
7466*dc5640d1SHerbert Xue create your injector. Otherwise, it returns null.
7467*dc5640d1SHerbert Xue @return The current servlet context.
7468*dc5640d1SHerbert Xue @since 3.0]]>
7469*dc5640d1SHerbert Xue      </doc>
7470*dc5640d1SHerbert Xue    </method>
7471*dc5640d1SHerbert Xue    <doc>
7472*dc5640d1SHerbert Xue    <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
7473*dc5640d1SHerbert Xue objects so you can inject the request, response, session, etc.
7474*dc5640d1SHerbert Xue
7475*dc5640d1SHerbert Xue <p>
7476*dc5640d1SHerbert Xue You should subclass this module to register servlets and
7477*dc5640d1SHerbert Xue filters in the {@link #configureServlets()} method.
7478*dc5640d1SHerbert Xue
7479*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
7480*dc5640d1SHerbert Xue @author [email protected] (Dhanji R. Prasanna)]]>
7481*dc5640d1SHerbert Xue    </doc>
7482*dc5640d1SHerbert Xue  </class>
7483*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletModule -->
7484*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7485*dc5640d1SHerbert Xue  <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
7486*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7487*dc5640d1SHerbert Xue    deprecated="not deprecated">
7488*dc5640d1SHerbert Xue    <method name="through"
7489*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7490*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7491*dc5640d1SHerbert Xue      deprecated="not deprecated">
7492*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7493*dc5640d1SHerbert Xue    </method>
7494*dc5640d1SHerbert Xue    <method name="through"
7495*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7496*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7497*dc5640d1SHerbert Xue      deprecated="not deprecated">
7498*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7499*dc5640d1SHerbert Xue    </method>
7500*dc5640d1SHerbert Xue    <method name="through"
7501*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7502*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7503*dc5640d1SHerbert Xue      deprecated="not deprecated">
7504*dc5640d1SHerbert Xue      <param name="filter" type="javax.servlet.Filter"/>
7505*dc5640d1SHerbert Xue      <doc>
7506*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7507*dc5640d1SHerbert Xue      </doc>
7508*dc5640d1SHerbert Xue    </method>
7509*dc5640d1SHerbert Xue    <method name="through"
7510*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7511*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7512*dc5640d1SHerbert Xue      deprecated="not deprecated">
7513*dc5640d1SHerbert Xue      <param name="filterKey" type="java.lang.Class&lt;? extends javax.servlet.Filter&gt;"/>
7514*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7515*dc5640d1SHerbert Xue    </method>
7516*dc5640d1SHerbert Xue    <method name="through"
7517*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7518*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7519*dc5640d1SHerbert Xue      deprecated="not deprecated">
7520*dc5640d1SHerbert Xue      <param name="filterKey" type="com.google.inject.Key&lt;? extends javax.servlet.Filter&gt;"/>
7521*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7522*dc5640d1SHerbert Xue    </method>
7523*dc5640d1SHerbert Xue    <method name="through"
7524*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7525*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7526*dc5640d1SHerbert Xue      deprecated="not deprecated">
7527*dc5640d1SHerbert Xue      <param name="filter" type="javax.servlet.Filter"/>
7528*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7529*dc5640d1SHerbert Xue      <doc>
7530*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7531*dc5640d1SHerbert Xue      </doc>
7532*dc5640d1SHerbert Xue    </method>
7533*dc5640d1SHerbert Xue    <doc>
7534*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7535*dc5640d1SHerbert Xue
7536*dc5640d1SHerbert Xue @since 2.0]]>
7537*dc5640d1SHerbert Xue    </doc>
7538*dc5640d1SHerbert Xue  </interface>
7539*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
7540*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7541*dc5640d1SHerbert Xue  <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
7542*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
7543*dc5640d1SHerbert Xue    deprecated="not deprecated">
7544*dc5640d1SHerbert Xue    <method name="with"
7545*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7546*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7547*dc5640d1SHerbert Xue      deprecated="not deprecated">
7548*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7549*dc5640d1SHerbert Xue    </method>
7550*dc5640d1SHerbert Xue    <method name="with"
7551*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7552*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7553*dc5640d1SHerbert Xue      deprecated="not deprecated">
7554*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7555*dc5640d1SHerbert Xue    </method>
7556*dc5640d1SHerbert Xue    <method name="with"
7557*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7558*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7559*dc5640d1SHerbert Xue      deprecated="not deprecated">
7560*dc5640d1SHerbert Xue      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7561*dc5640d1SHerbert Xue      <doc>
7562*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7563*dc5640d1SHerbert Xue      </doc>
7564*dc5640d1SHerbert Xue    </method>
7565*dc5640d1SHerbert Xue    <method name="with"
7566*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7567*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7568*dc5640d1SHerbert Xue      deprecated="not deprecated">
7569*dc5640d1SHerbert Xue      <param name="servletKey" type="java.lang.Class&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7570*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7571*dc5640d1SHerbert Xue    </method>
7572*dc5640d1SHerbert Xue    <method name="with"
7573*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7574*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7575*dc5640d1SHerbert Xue      deprecated="not deprecated">
7576*dc5640d1SHerbert Xue      <param name="servletKey" type="com.google.inject.Key&lt;? extends javax.servlet.http.HttpServlet&gt;"/>
7577*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7578*dc5640d1SHerbert Xue    </method>
7579*dc5640d1SHerbert Xue    <method name="with"
7580*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7581*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7582*dc5640d1SHerbert Xue      deprecated="not deprecated">
7583*dc5640d1SHerbert Xue      <param name="servlet" type="javax.servlet.http.HttpServlet"/>
7584*dc5640d1SHerbert Xue      <param name="initParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
7585*dc5640d1SHerbert Xue      <doc>
7586*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
7587*dc5640d1SHerbert Xue      </doc>
7588*dc5640d1SHerbert Xue    </method>
7589*dc5640d1SHerbert Xue    <doc>
7590*dc5640d1SHerbert Xue    <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
7591*dc5640d1SHerbert Xue
7592*dc5640d1SHerbert Xue @since 2.0]]>
7593*dc5640d1SHerbert Xue    </doc>
7594*dc5640d1SHerbert Xue  </interface>
7595*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
7596*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleBinding -->
7597*dc5640d1SHerbert Xue  <interface name="ServletModuleBinding"    abstract="true"
7598*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7599*dc5640d1SHerbert Xue    deprecated="not deprecated">
7600*dc5640d1SHerbert Xue    <method name="getUriPatternType" return="com.google.inject.servlet.UriPatternType"
7601*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7602*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7603*dc5640d1SHerbert Xue      deprecated="not deprecated">
7604*dc5640d1SHerbert Xue      <doc>
7605*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern type that this binding was created with.]]>
7606*dc5640d1SHerbert Xue      </doc>
7607*dc5640d1SHerbert Xue    </method>
7608*dc5640d1SHerbert Xue    <method name="getPattern" return="java.lang.String"
7609*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7610*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7611*dc5640d1SHerbert Xue      deprecated="not deprecated">
7612*dc5640d1SHerbert Xue      <doc>
7613*dc5640d1SHerbert Xue      <![CDATA[Returns the pattern used to match against the binding.]]>
7614*dc5640d1SHerbert Xue      </doc>
7615*dc5640d1SHerbert Xue    </method>
7616*dc5640d1SHerbert Xue    <method name="getInitParams" return="java.util.Map&lt;java.lang.String, java.lang.String&gt;"
7617*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7618*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7619*dc5640d1SHerbert Xue      deprecated="not deprecated">
7620*dc5640d1SHerbert Xue      <doc>
7621*dc5640d1SHerbert Xue      <![CDATA[Returns any context params supplied when creating the binding.]]>
7622*dc5640d1SHerbert Xue      </doc>
7623*dc5640d1SHerbert Xue    </method>
7624*dc5640d1SHerbert Xue    <method name="matchesUri" return="boolean"
7625*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7626*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7627*dc5640d1SHerbert Xue      deprecated="not deprecated">
7628*dc5640d1SHerbert Xue      <param name="uri" type="java.lang.String"/>
7629*dc5640d1SHerbert Xue      <doc>
7630*dc5640d1SHerbert Xue      <![CDATA[Returns true if the given URI will match this binding.]]>
7631*dc5640d1SHerbert Xue      </doc>
7632*dc5640d1SHerbert Xue    </method>
7633*dc5640d1SHerbert Xue    <doc>
7634*dc5640d1SHerbert Xue    <![CDATA[A binding created by {@link ServletModule}.
7635*dc5640d1SHerbert Xue
7636*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
7637*dc5640d1SHerbert Xue @since 3.0]]>
7638*dc5640d1SHerbert Xue    </doc>
7639*dc5640d1SHerbert Xue  </interface>
7640*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleBinding -->
7641*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7642*dc5640d1SHerbert Xue  <interface name="ServletModuleTargetVisitor"    abstract="true"
7643*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7644*dc5640d1SHerbert Xue    deprecated="not deprecated">
7645*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
7646*dc5640d1SHerbert Xue    <method name="visit" return="V"
7647*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7648*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7649*dc5640d1SHerbert Xue      deprecated="not deprecated">
7650*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedFilterBinding"/>
7651*dc5640d1SHerbert Xue      <doc>
7652*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter}, where
7653*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a Class or Key.
7654*dc5640d1SHerbert Xue
7655*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7656*dc5640d1SHerbert Xue      </doc>
7657*dc5640d1SHerbert Xue    </method>
7658*dc5640d1SHerbert Xue    <method name="visit" return="V"
7659*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7660*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7661*dc5640d1SHerbert Xue      deprecated="not deprecated">
7662*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceFilterBinding"/>
7663*dc5640d1SHerbert Xue      <doc>
7664*dc5640d1SHerbert Xue      <![CDATA[Visits a filter binding created by {@link ServletModule#filter} where
7665*dc5640d1SHerbert Xue {@link FilterKeyBindingBuilder#through} is called with a {@link Filter}.
7666*dc5640d1SHerbert Xue
7667*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7668*dc5640d1SHerbert Xue      </doc>
7669*dc5640d1SHerbert Xue    </method>
7670*dc5640d1SHerbert Xue    <method name="visit" return="V"
7671*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7672*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7673*dc5640d1SHerbert Xue      deprecated="not deprecated">
7674*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.LinkedServletBinding"/>
7675*dc5640d1SHerbert Xue      <doc>
7676*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7677*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with a Class or Key.
7678*dc5640d1SHerbert Xue
7679*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7680*dc5640d1SHerbert Xue      </doc>
7681*dc5640d1SHerbert Xue    </method>
7682*dc5640d1SHerbert Xue    <method name="visit" return="V"
7683*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7684*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7685*dc5640d1SHerbert Xue      deprecated="not deprecated">
7686*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.servlet.InstanceServletBinding"/>
7687*dc5640d1SHerbert Xue      <doc>
7688*dc5640d1SHerbert Xue      <![CDATA[Visits a servlet binding created by {@link ServletModule#serve} where
7689*dc5640d1SHerbert Xue {@link ServletKeyBindingBuilder#with}, is called with an {@link HttpServlet}.
7690*dc5640d1SHerbert Xue
7691*dc5640d1SHerbert Xue If multiple patterns were specified, this will be called multiple times.]]>
7692*dc5640d1SHerbert Xue      </doc>
7693*dc5640d1SHerbert Xue    </method>
7694*dc5640d1SHerbert Xue    <doc>
7695*dc5640d1SHerbert Xue    <![CDATA[A visitor for the servlet extension.
7696*dc5640d1SHerbert Xue
7697*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
7698*dc5640d1SHerbert Xue {@link ServletModule} will be visited through this interface.
7699*dc5640d1SHerbert Xue
7700*dc5640d1SHerbert Xue @since 3.0
7701*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
7702*dc5640d1SHerbert Xue    </doc>
7703*dc5640d1SHerbert Xue  </interface>
7704*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.servlet.ServletModuleTargetVisitor -->
7705*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.ServletScopes -->
7706*dc5640d1SHerbert Xue  <class name="ServletScopes" extends="java.lang.Object"
7707*dc5640d1SHerbert Xue    abstract="false"
7708*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7709*dc5640d1SHerbert Xue    deprecated="not deprecated">
7710*dc5640d1SHerbert Xue    <method name="continueRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7711*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7712*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7713*dc5640d1SHerbert Xue      deprecated="not deprecated">
7714*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7715*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7716*dc5640d1SHerbert Xue      <doc>
7717*dc5640d1SHerbert Xue      <![CDATA[Wraps the given callable in a contextual callable that "continues" the
7718*dc5640d1SHerbert Xue HTTP request in another thread. This acts as a way of transporting
7719*dc5640d1SHerbert Xue request context data from the request processing thread to to worker
7720*dc5640d1SHerbert Xue threads.
7721*dc5640d1SHerbert Xue <p>
7722*dc5640d1SHerbert Xue There are some limitations:
7723*dc5640d1SHerbert Xue <ul>
7724*dc5640d1SHerbert Xue   <li>Derived objects (i.e. anything marked @RequestScoped will not be
7725*dc5640d1SHerbert Xue      transported.</li>
7726*dc5640d1SHerbert Xue   <li>State changes to the HttpServletRequest after this method is called
7727*dc5640d1SHerbert Xue      will not be seen in the continued thread.</li>
7728*dc5640d1SHerbert Xue   <li>Only the HttpServletRequest, ServletContext and request parameter
7729*dc5640d1SHerbert Xue      map are available in the continued thread. The response and session
7730*dc5640d1SHerbert Xue      are not available.</li>
7731*dc5640d1SHerbert Xue </ul>
7732*dc5640d1SHerbert Xue
7733*dc5640d1SHerbert Xue <p>The returned callable will throw a {@link ScopingException} when called
7734*dc5640d1SHerbert Xue if the HTTP request scope is still active on the current thread.
7735*dc5640d1SHerbert Xue
7736*dc5640d1SHerbert Xue @param callable code to be executed in another thread, which depends on
7737*dc5640d1SHerbert Xue     the request scope.
7738*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7739*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7740*dc5640d1SHerbert Xue     the value.
7741*dc5640d1SHerbert Xue @return a callable that will invoke the given callable, making the request
7742*dc5640d1SHerbert Xue     context available to it.
7743*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7744*dc5640d1SHerbert Xue     thread, or if the request has completed.
7745*dc5640d1SHerbert Xue
7746*dc5640d1SHerbert Xue @since 3.0]]>
7747*dc5640d1SHerbert Xue      </doc>
7748*dc5640d1SHerbert Xue    </method>
7749*dc5640d1SHerbert Xue    <method name="transferRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7750*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7751*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7752*dc5640d1SHerbert Xue      deprecated="not deprecated">
7753*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7754*dc5640d1SHerbert Xue      <doc>
7755*dc5640d1SHerbert Xue      <![CDATA[Wraps the given callable in a contextual callable that "transfers" the
7756*dc5640d1SHerbert Xue request to another thread. This acts as a way of transporting
7757*dc5640d1SHerbert Xue request context data from the current thread to a future thread.
7758*dc5640d1SHerbert Xue
7759*dc5640d1SHerbert Xue <p>As opposed to {@link #continueRequest}, this method propagates all
7760*dc5640d1SHerbert Xue existing scoped objects. The primary use case is in server implementations
7761*dc5640d1SHerbert Xue where you can detach the request processing thread while waiting for data,
7762*dc5640d1SHerbert Xue and reattach to a different thread to finish processing at a later time.
7763*dc5640d1SHerbert Xue
7764*dc5640d1SHerbert Xue <p>Because request-scoped objects are not typically thread-safe, the
7765*dc5640d1SHerbert Xue callable returned by this method must not be run on a different thread
7766*dc5640d1SHerbert Xue until the current request scope has terminated. The returned callable will
7767*dc5640d1SHerbert Xue block until the current thread has released the request scope.
7768*dc5640d1SHerbert Xue
7769*dc5640d1SHerbert Xue @param callable code to be executed in another thread, which depends on
7770*dc5640d1SHerbert Xue     the request scope.
7771*dc5640d1SHerbert Xue @return a callable that will invoke the given callable, making the request
7772*dc5640d1SHerbert Xue     context available to it.
7773*dc5640d1SHerbert Xue @throws OutOfScopeException if this method is called from a non-request
7774*dc5640d1SHerbert Xue     thread, or if the request has completed.
7775*dc5640d1SHerbert Xue @since 4.0]]>
7776*dc5640d1SHerbert Xue      </doc>
7777*dc5640d1SHerbert Xue    </method>
7778*dc5640d1SHerbert Xue    <method name="isRequestScoped" return="boolean"
7779*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7780*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7781*dc5640d1SHerbert Xue      deprecated="not deprecated">
7782*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;?&gt;"/>
7783*dc5640d1SHerbert Xue      <doc>
7784*dc5640d1SHerbert Xue      <![CDATA[Returns true if {@code binding} is request-scoped. If the binding is a
7785*dc5640d1SHerbert Xue {@link com.google.inject.spi.LinkedKeyBinding linked key binding} and
7786*dc5640d1SHerbert Xue belongs to an injector (i. e. it was retrieved via
7787*dc5640d1SHerbert Xue {@link Injector#getBinding Injector.getBinding()}), then this method will
7788*dc5640d1SHerbert Xue also return true if the target binding is request-scoped.
7789*dc5640d1SHerbert Xue
7790*dc5640d1SHerbert Xue @since 4.0]]>
7791*dc5640d1SHerbert Xue      </doc>
7792*dc5640d1SHerbert Xue    </method>
7793*dc5640d1SHerbert Xue    <method name="scopeRequest" return="java.util.concurrent.Callable&lt;T&gt;"
7794*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7795*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7796*dc5640d1SHerbert Xue      deprecated="not deprecated">
7797*dc5640d1SHerbert Xue      <param name="callable" type="java.util.concurrent.Callable&lt;T&gt;"/>
7798*dc5640d1SHerbert Xue      <param name="seedMap" type="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, java.lang.Object&gt;"/>
7799*dc5640d1SHerbert Xue      <doc>
7800*dc5640d1SHerbert Xue      <![CDATA[Scopes the given callable inside a request scope. This is not the same
7801*dc5640d1SHerbert Xue as the HTTP request scope, but is used if no HTTP request scope is in
7802*dc5640d1SHerbert Xue progress. In this way, keys can be scoped as @RequestScoped and exist
7803*dc5640d1SHerbert Xue in non-HTTP requests (for example: RPC requests) as well as in HTTP
7804*dc5640d1SHerbert Xue request threads.
7805*dc5640d1SHerbert Xue
7806*dc5640d1SHerbert Xue <p>The returned callable will throw a {@link ScopingException} when called
7807*dc5640d1SHerbert Xue if there is a request scope already active on the current thread.
7808*dc5640d1SHerbert Xue
7809*dc5640d1SHerbert Xue @param callable code to be executed which depends on the request scope.
7810*dc5640d1SHerbert Xue     Typically in another thread, but not necessarily so.
7811*dc5640d1SHerbert Xue @param seedMap the initial set of scoped instances for Guice to seed the
7812*dc5640d1SHerbert Xue     request scope with.  To seed a key with null, use {@code null} as
7813*dc5640d1SHerbert Xue     the value.
7814*dc5640d1SHerbert Xue @return a callable that when called will run inside the a request scope
7815*dc5640d1SHerbert Xue     that exposes the instances in the {@code seedMap} as scoped keys.
7816*dc5640d1SHerbert Xue @since 3.0]]>
7817*dc5640d1SHerbert Xue      </doc>
7818*dc5640d1SHerbert Xue    </method>
7819*dc5640d1SHerbert Xue    <field name="REQUEST" type="com.google.inject.Scope"
7820*dc5640d1SHerbert Xue      transient="false" volatile="false"
7821*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7822*dc5640d1SHerbert Xue      deprecated="not deprecated">
7823*dc5640d1SHerbert Xue      <doc>
7824*dc5640d1SHerbert Xue      <![CDATA[HTTP servlet request scope.]]>
7825*dc5640d1SHerbert Xue      </doc>
7826*dc5640d1SHerbert Xue    </field>
7827*dc5640d1SHerbert Xue    <field name="SESSION" type="com.google.inject.Scope"
7828*dc5640d1SHerbert Xue      transient="false" volatile="false"
7829*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
7830*dc5640d1SHerbert Xue      deprecated="not deprecated">
7831*dc5640d1SHerbert Xue      <doc>
7832*dc5640d1SHerbert Xue      <![CDATA[HTTP session scope.]]>
7833*dc5640d1SHerbert Xue      </doc>
7834*dc5640d1SHerbert Xue    </field>
7835*dc5640d1SHerbert Xue    <doc>
7836*dc5640d1SHerbert Xue    <![CDATA[Servlet scopes.
7837*dc5640d1SHerbert Xue
7838*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7839*dc5640d1SHerbert Xue    </doc>
7840*dc5640d1SHerbert Xue  </class>
7841*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.ServletScopes -->
7842*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.SessionScoped -->
7843*dc5640d1SHerbert Xue  <class name="SessionScoped"    abstract="true"
7844*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7845*dc5640d1SHerbert Xue    deprecated="not deprecated">
7846*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
7847*dc5640d1SHerbert Xue    <doc>
7848*dc5640d1SHerbert Xue    <![CDATA[Apply this to implementation classes when you want one instance per session.
7849*dc5640d1SHerbert Xue
7850*dc5640d1SHerbert Xue @see com.google.inject.Scopes#SINGLETON
7851*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
7852*dc5640d1SHerbert Xue    </doc>
7853*dc5640d1SHerbert Xue  </class>
7854*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.SessionScoped -->
7855*dc5640d1SHerbert Xue  <!-- start class com.google.inject.servlet.UriPatternType -->
7856*dc5640d1SHerbert Xue  <class name="UriPatternType" extends="java.lang.Enum&lt;com.google.inject.servlet.UriPatternType&gt;"
7857*dc5640d1SHerbert Xue    abstract="false"
7858*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
7859*dc5640d1SHerbert Xue    deprecated="not deprecated">
7860*dc5640d1SHerbert Xue    <method name="values" return="com.google.inject.servlet.UriPatternType[]"
7861*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7862*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7863*dc5640d1SHerbert Xue      deprecated="not deprecated">
7864*dc5640d1SHerbert Xue    </method>
7865*dc5640d1SHerbert Xue    <method name="valueOf" return="com.google.inject.servlet.UriPatternType"
7866*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
7867*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
7868*dc5640d1SHerbert Xue      deprecated="not deprecated">
7869*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
7870*dc5640d1SHerbert Xue    </method>
7871*dc5640d1SHerbert Xue    <doc>
7872*dc5640d1SHerbert Xue    <![CDATA[An enumeration of the available URI-pattern matching styles
7873*dc5640d1SHerbert Xue
7874*dc5640d1SHerbert Xue @since 3.0]]>
7875*dc5640d1SHerbert Xue    </doc>
7876*dc5640d1SHerbert Xue  </class>
7877*dc5640d1SHerbert Xue  <!-- end class com.google.inject.servlet.UriPatternType -->
7878*dc5640d1SHerbert Xue</package>
7879*dc5640d1SHerbert Xue<package name="com.google.inject.spi">
7880*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
7881*dc5640d1SHerbert Xue  <interface name="BindingScopingVisitor"    abstract="true"
7882*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7883*dc5640d1SHerbert Xue    deprecated="not deprecated">
7884*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
7885*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7887*dc5640d1SHerbert Xue      deprecated="not deprecated">
7888*dc5640d1SHerbert Xue      <doc>
7889*dc5640d1SHerbert Xue      <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
7890*dc5640d1SHerbert Xue injector bindings.]]>
7891*dc5640d1SHerbert Xue      </doc>
7892*dc5640d1SHerbert Xue    </method>
7893*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
7894*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7895*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7896*dc5640d1SHerbert Xue      deprecated="not deprecated">
7897*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
7898*dc5640d1SHerbert Xue      <doc>
7899*dc5640d1SHerbert Xue      <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
7900*dc5640d1SHerbert Xue      </doc>
7901*dc5640d1SHerbert Xue    </method>
7902*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
7903*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7904*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7905*dc5640d1SHerbert Xue      deprecated="not deprecated">
7906*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
7907*dc5640d1SHerbert Xue      <doc>
7908*dc5640d1SHerbert Xue      <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
7909*dc5640d1SHerbert Xue that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
7910*dc5640d1SHerbert Xue Scope) Binder.bindScope()}.]]>
7911*dc5640d1SHerbert Xue      </doc>
7912*dc5640d1SHerbert Xue    </method>
7913*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
7914*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7915*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7916*dc5640d1SHerbert Xue      deprecated="not deprecated">
7917*dc5640d1SHerbert Xue      <doc>
7918*dc5640d1SHerbert Xue      <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
7919*dc5640d1SHerbert Xue injector should use scoping annotations to find a scope. On an injector, it indicates that
7920*dc5640d1SHerbert Xue no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
7921*dc5640d1SHerbert Xue is linked to a scoped binding.]]>
7922*dc5640d1SHerbert Xue      </doc>
7923*dc5640d1SHerbert Xue    </method>
7924*dc5640d1SHerbert Xue    <doc>
7925*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to scope an injection.
7926*dc5640d1SHerbert Xue
7927*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
7928*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
7929*dc5640d1SHerbert Xue @since 2.0]]>
7930*dc5640d1SHerbert Xue    </doc>
7931*dc5640d1SHerbert Xue  </interface>
7932*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
7933*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
7934*dc5640d1SHerbert Xue  <interface name="BindingTargetVisitor"    abstract="true"
7935*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
7936*dc5640d1SHerbert Xue    deprecated="not deprecated">
7937*dc5640d1SHerbert Xue    <method name="visit" return="V"
7938*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7939*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7940*dc5640d1SHerbert Xue      deprecated="not deprecated">
7941*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
7942*dc5640d1SHerbert Xue      <doc>
7943*dc5640d1SHerbert Xue      <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
7944*dc5640d1SHerbert Xue found in both module and injector bindings.]]>
7945*dc5640d1SHerbert Xue      </doc>
7946*dc5640d1SHerbert Xue    </method>
7947*dc5640d1SHerbert Xue    <method name="visit" return="V"
7948*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7949*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7950*dc5640d1SHerbert Xue      deprecated="not deprecated">
7951*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
7952*dc5640d1SHerbert Xue      <doc>
7953*dc5640d1SHerbert Xue      <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
7954*dc5640d1SHerbert Xue injections. This target is found in both module and injector bindings.]]>
7955*dc5640d1SHerbert Xue      </doc>
7956*dc5640d1SHerbert Xue    </method>
7957*dc5640d1SHerbert Xue    <method name="visit" return="V"
7958*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7959*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7960*dc5640d1SHerbert Xue      deprecated="not deprecated">
7961*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
7962*dc5640d1SHerbert Xue      <doc>
7963*dc5640d1SHerbert Xue      <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
7964*dc5640d1SHerbert Xue that provider's {@code get} method is invoked. This target is found in both module and injector
7965*dc5640d1SHerbert Xue bindings.]]>
7966*dc5640d1SHerbert Xue      </doc>
7967*dc5640d1SHerbert Xue    </method>
7968*dc5640d1SHerbert Xue    <method name="visit" return="V"
7969*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7970*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7971*dc5640d1SHerbert Xue      deprecated="not deprecated">
7972*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
7973*dc5640d1SHerbert Xue      <doc>
7974*dc5640d1SHerbert Xue      <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
7975*dc5640d1SHerbert Xue target is found in both module and injector bindings.]]>
7976*dc5640d1SHerbert Xue      </doc>
7977*dc5640d1SHerbert Xue    </method>
7978*dc5640d1SHerbert Xue    <method name="visit" return="V"
7979*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7980*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7981*dc5640d1SHerbert Xue      deprecated="not deprecated">
7982*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
7983*dc5640d1SHerbert Xue      <doc>
7984*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
7985*dc5640d1SHerbert Xue found in injector bindings.]]>
7986*dc5640d1SHerbert Xue      </doc>
7987*dc5640d1SHerbert Xue    </method>
7988*dc5640d1SHerbert Xue    <method name="visit" return="V"
7989*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
7990*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
7991*dc5640d1SHerbert Xue      deprecated="not deprecated">
7992*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
7993*dc5640d1SHerbert Xue      <doc>
7994*dc5640d1SHerbert Xue      <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
7995*dc5640d1SHerbert Xue that the injector should use its implicit binding strategies to resolve injections.]]>
7996*dc5640d1SHerbert Xue      </doc>
7997*dc5640d1SHerbert Xue    </method>
7998*dc5640d1SHerbert Xue    <method name="visit" return="V"
7999*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8000*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8001*dc5640d1SHerbert Xue      deprecated="not deprecated">
8002*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8003*dc5640d1SHerbert Xue      <doc>
8004*dc5640d1SHerbert Xue      <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
8005*dc5640d1SHerbert Xue {@code constructor}. This target is found only on injector bindings.]]>
8006*dc5640d1SHerbert Xue      </doc>
8007*dc5640d1SHerbert Xue    </method>
8008*dc5640d1SHerbert Xue    <method name="visit" return="V"
8009*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8010*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8011*dc5640d1SHerbert Xue      deprecated="not deprecated">
8012*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8013*dc5640d1SHerbert Xue      <doc>
8014*dc5640d1SHerbert Xue      <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
8015*dc5640d1SHerbert Xue has the same binding annotation but a different type. This target is found only on injector
8016*dc5640d1SHerbert Xue bindings.]]>
8017*dc5640d1SHerbert Xue      </doc>
8018*dc5640d1SHerbert Xue    </method>
8019*dc5640d1SHerbert Xue    <method name="visit" return="V"
8020*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8021*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8022*dc5640d1SHerbert Xue      deprecated="not deprecated">
8023*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8024*dc5640d1SHerbert Xue      <doc>
8025*dc5640d1SHerbert Xue      <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
8026*dc5640d1SHerbert Xue provided type. This target is found only on injector bindings.]]>
8027*dc5640d1SHerbert Xue      </doc>
8028*dc5640d1SHerbert Xue    </method>
8029*dc5640d1SHerbert Xue    <doc>
8030*dc5640d1SHerbert Xue    <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
8031*dc5640d1SHerbert Xue
8032*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8033*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8034*dc5640d1SHerbert Xue @since 2.0]]>
8035*dc5640d1SHerbert Xue    </doc>
8036*dc5640d1SHerbert Xue  </interface>
8037*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
8038*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConstructorBinding -->
8039*dc5640d1SHerbert Xue  <interface name="ConstructorBinding"    abstract="true"
8040*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8041*dc5640d1SHerbert Xue    deprecated="not deprecated">
8042*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8043*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8044*dc5640d1SHerbert Xue    <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
8045*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8046*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8047*dc5640d1SHerbert Xue      deprecated="not deprecated">
8048*dc5640d1SHerbert Xue      <doc>
8049*dc5640d1SHerbert Xue      <![CDATA[Gets the constructor this binding injects.]]>
8050*dc5640d1SHerbert Xue      </doc>
8051*dc5640d1SHerbert Xue    </method>
8052*dc5640d1SHerbert Xue    <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
8053*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8054*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8055*dc5640d1SHerbert Xue      deprecated="not deprecated">
8056*dc5640d1SHerbert Xue      <doc>
8057*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
8058*dc5640d1SHerbert Xue
8059*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
8060*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
8061*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
8062*dc5640d1SHerbert Xue      </doc>
8063*dc5640d1SHerbert Xue    </method>
8064*dc5640d1SHerbert Xue    <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
8065*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8066*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8067*dc5640d1SHerbert Xue      deprecated="not deprecated">
8068*dc5640d1SHerbert Xue      <doc>
8069*dc5640d1SHerbert Xue      <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
8070*dc5640d1SHerbert Xue
8071*dc5640d1SHerbert Xue @return a possibly empty map]]>
8072*dc5640d1SHerbert Xue      </doc>
8073*dc5640d1SHerbert Xue    </method>
8074*dc5640d1SHerbert Xue    <doc>
8075*dc5640d1SHerbert Xue    <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
8076*dc5640d1SHerbert Xue instantiated by invoking the constructor.
8077*dc5640d1SHerbert Xue
8078*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8079*dc5640d1SHerbert Xue @since 2.0]]>
8080*dc5640d1SHerbert Xue    </doc>
8081*dc5640d1SHerbert Xue  </interface>
8082*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConstructorBinding -->
8083*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
8084*dc5640d1SHerbert Xue  <interface name="ConvertedConstantBinding"    abstract="true"
8085*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8086*dc5640d1SHerbert Xue    deprecated="not deprecated">
8087*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8088*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8089*dc5640d1SHerbert Xue    <method name="getValue" return="T"
8090*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8091*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8092*dc5640d1SHerbert Xue      deprecated="not deprecated">
8093*dc5640d1SHerbert Xue      <doc>
8094*dc5640d1SHerbert Xue      <![CDATA[Returns the converted value.]]>
8095*dc5640d1SHerbert Xue      </doc>
8096*dc5640d1SHerbert Xue    </method>
8097*dc5640d1SHerbert Xue    <method name="getTypeConverterBinding" return="com.google.inject.spi.TypeConverterBinding"
8098*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8099*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8100*dc5640d1SHerbert Xue      deprecated="not deprecated">
8101*dc5640d1SHerbert Xue      <doc>
8102*dc5640d1SHerbert Xue      <![CDATA[Returns the type converter binding used to convert the constant.
8103*dc5640d1SHerbert Xue
8104*dc5640d1SHerbert Xue @since 3.0]]>
8105*dc5640d1SHerbert Xue      </doc>
8106*dc5640d1SHerbert Xue    </method>
8107*dc5640d1SHerbert Xue    <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
8108*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8109*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8110*dc5640d1SHerbert Xue      deprecated="not deprecated">
8111*dc5640d1SHerbert Xue      <doc>
8112*dc5640d1SHerbert Xue      <![CDATA[Returns the key for the source binding. That binding can be retrieved from an injector using
8113*dc5640d1SHerbert Xue {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
8114*dc5640d1SHerbert Xue      </doc>
8115*dc5640d1SHerbert Xue    </method>
8116*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8117*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8118*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8119*dc5640d1SHerbert Xue      deprecated="not deprecated">
8120*dc5640d1SHerbert Xue      <doc>
8121*dc5640d1SHerbert Xue      <![CDATA[Returns a singleton set containing only the converted key.]]>
8122*dc5640d1SHerbert Xue      </doc>
8123*dc5640d1SHerbert Xue    </method>
8124*dc5640d1SHerbert Xue    <doc>
8125*dc5640d1SHerbert Xue    <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
8126*dc5640d1SHerbert Xue binding annotation but a different type.
8127*dc5640d1SHerbert Xue
8128*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8129*dc5640d1SHerbert Xue @since 2.0]]>
8130*dc5640d1SHerbert Xue    </doc>
8131*dc5640d1SHerbert Xue  </interface>
8132*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
8133*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
8134*dc5640d1SHerbert Xue  <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
8135*dc5640d1SHerbert Xue    abstract="false"
8136*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8137*dc5640d1SHerbert Xue    deprecated="not deprecated">
8138*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
8139*dc5640d1SHerbert Xue    <constructor name="DefaultBindingScopingVisitor"
8140*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8141*dc5640d1SHerbert Xue      deprecated="not deprecated">
8142*dc5640d1SHerbert Xue    </constructor>
8143*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8144*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8145*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8146*dc5640d1SHerbert Xue      deprecated="not deprecated">
8147*dc5640d1SHerbert Xue      <doc>
8148*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8149*dc5640d1SHerbert Xue      </doc>
8150*dc5640d1SHerbert Xue    </method>
8151*dc5640d1SHerbert Xue    <method name="visitEagerSingleton" return="V"
8152*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8153*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8154*dc5640d1SHerbert Xue      deprecated="not deprecated">
8155*dc5640d1SHerbert Xue    </method>
8156*dc5640d1SHerbert Xue    <method name="visitScope" return="V"
8157*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8158*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8159*dc5640d1SHerbert Xue      deprecated="not deprecated">
8160*dc5640d1SHerbert Xue      <param name="scope" type="com.google.inject.Scope"/>
8161*dc5640d1SHerbert Xue    </method>
8162*dc5640d1SHerbert Xue    <method name="visitScopeAnnotation" return="V"
8163*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8164*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8165*dc5640d1SHerbert Xue      deprecated="not deprecated">
8166*dc5640d1SHerbert Xue      <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
8167*dc5640d1SHerbert Xue    </method>
8168*dc5640d1SHerbert Xue    <method name="visitNoScoping" return="V"
8169*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8170*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8171*dc5640d1SHerbert Xue      deprecated="not deprecated">
8172*dc5640d1SHerbert Xue    </method>
8173*dc5640d1SHerbert Xue    <doc>
8174*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8175*dc5640d1SHerbert Xue {@link #visitOther()}, returning its result.
8176*dc5640d1SHerbert Xue
8177*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8178*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8179*dc5640d1SHerbert Xue
8180*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8181*dc5640d1SHerbert Xue @since 2.0]]>
8182*dc5640d1SHerbert Xue    </doc>
8183*dc5640d1SHerbert Xue  </class>
8184*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
8185*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
8186*dc5640d1SHerbert Xue  <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
8187*dc5640d1SHerbert Xue    abstract="true"
8188*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8189*dc5640d1SHerbert Xue    deprecated="not deprecated">
8190*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
8191*dc5640d1SHerbert Xue    <constructor name="DefaultBindingTargetVisitor"
8192*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8193*dc5640d1SHerbert Xue      deprecated="not deprecated">
8194*dc5640d1SHerbert Xue    </constructor>
8195*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8196*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8197*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8198*dc5640d1SHerbert Xue      deprecated="not deprecated">
8199*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
8200*dc5640d1SHerbert Xue      <doc>
8201*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8202*dc5640d1SHerbert Xue      </doc>
8203*dc5640d1SHerbert Xue    </method>
8204*dc5640d1SHerbert Xue    <method name="visit" return="V"
8205*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8206*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8207*dc5640d1SHerbert Xue      deprecated="not deprecated">
8208*dc5640d1SHerbert Xue      <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
8209*dc5640d1SHerbert Xue    </method>
8210*dc5640d1SHerbert Xue    <method name="visit" return="V"
8211*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8212*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8213*dc5640d1SHerbert Xue      deprecated="not deprecated">
8214*dc5640d1SHerbert Xue      <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
8215*dc5640d1SHerbert Xue    </method>
8216*dc5640d1SHerbert Xue    <method name="visit" return="V"
8217*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8218*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8219*dc5640d1SHerbert Xue      deprecated="not deprecated">
8220*dc5640d1SHerbert Xue      <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
8221*dc5640d1SHerbert Xue    </method>
8222*dc5640d1SHerbert Xue    <method name="visit" return="V"
8223*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8224*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8225*dc5640d1SHerbert Xue      deprecated="not deprecated">
8226*dc5640d1SHerbert Xue      <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
8227*dc5640d1SHerbert Xue    </method>
8228*dc5640d1SHerbert Xue    <method name="visit" return="V"
8229*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8230*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8231*dc5640d1SHerbert Xue      deprecated="not deprecated">
8232*dc5640d1SHerbert Xue      <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
8233*dc5640d1SHerbert Xue    </method>
8234*dc5640d1SHerbert Xue    <method name="visit" return="V"
8235*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8236*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8237*dc5640d1SHerbert Xue      deprecated="not deprecated">
8238*dc5640d1SHerbert Xue      <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
8239*dc5640d1SHerbert Xue    </method>
8240*dc5640d1SHerbert Xue    <method name="visit" return="V"
8241*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8242*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8243*dc5640d1SHerbert Xue      deprecated="not deprecated">
8244*dc5640d1SHerbert Xue      <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
8245*dc5640d1SHerbert Xue    </method>
8246*dc5640d1SHerbert Xue    <method name="visit" return="V"
8247*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8248*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8249*dc5640d1SHerbert Xue      deprecated="not deprecated">
8250*dc5640d1SHerbert Xue      <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
8251*dc5640d1SHerbert Xue    </method>
8252*dc5640d1SHerbert Xue    <method name="visit" return="V"
8253*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8254*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8255*dc5640d1SHerbert Xue      deprecated="not deprecated">
8256*dc5640d1SHerbert Xue      <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
8257*dc5640d1SHerbert Xue    </method>
8258*dc5640d1SHerbert Xue    <doc>
8259*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
8260*dc5640d1SHerbert Xue #visitOther(Binding)}, returning its result.
8261*dc5640d1SHerbert Xue
8262*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8263*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8264*dc5640d1SHerbert Xue
8265*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8266*dc5640d1SHerbert Xue @since 2.0]]>
8267*dc5640d1SHerbert Xue    </doc>
8268*dc5640d1SHerbert Xue  </class>
8269*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
8270*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DefaultElementVisitor -->
8271*dc5640d1SHerbert Xue  <class name="DefaultElementVisitor" extends="java.lang.Object"
8272*dc5640d1SHerbert Xue    abstract="true"
8273*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8274*dc5640d1SHerbert Xue    deprecated="not deprecated">
8275*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
8276*dc5640d1SHerbert Xue    <constructor name="DefaultElementVisitor"
8277*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8278*dc5640d1SHerbert Xue      deprecated="not deprecated">
8279*dc5640d1SHerbert Xue    </constructor>
8280*dc5640d1SHerbert Xue    <method name="visitOther" return="V"
8281*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8282*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
8283*dc5640d1SHerbert Xue      deprecated="not deprecated">
8284*dc5640d1SHerbert Xue      <param name="element" type="com.google.inject.spi.Element"/>
8285*dc5640d1SHerbert Xue      <doc>
8286*dc5640d1SHerbert Xue      <![CDATA[Default visit implementation. Returns {@code null}.]]>
8287*dc5640d1SHerbert Xue      </doc>
8288*dc5640d1SHerbert Xue    </method>
8289*dc5640d1SHerbert Xue    <method name="visit" return="V"
8290*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8291*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8292*dc5640d1SHerbert Xue      deprecated="not deprecated">
8293*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
8294*dc5640d1SHerbert Xue    </method>
8295*dc5640d1SHerbert Xue    <method name="visit" return="V"
8296*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8297*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8298*dc5640d1SHerbert Xue      deprecated="not deprecated">
8299*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8300*dc5640d1SHerbert Xue    </method>
8301*dc5640d1SHerbert Xue    <method name="visit" return="V"
8302*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8303*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8304*dc5640d1SHerbert Xue      deprecated="not deprecated">
8305*dc5640d1SHerbert Xue      <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
8306*dc5640d1SHerbert Xue    </method>
8307*dc5640d1SHerbert Xue    <method name="visit" return="V"
8308*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8309*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8310*dc5640d1SHerbert Xue      deprecated="not deprecated">
8311*dc5640d1SHerbert Xue      <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
8312*dc5640d1SHerbert Xue    </method>
8313*dc5640d1SHerbert Xue    <method name="visit" return="V"
8314*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8315*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8316*dc5640d1SHerbert Xue      deprecated="not deprecated">
8317*dc5640d1SHerbert Xue      <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
8318*dc5640d1SHerbert Xue    </method>
8319*dc5640d1SHerbert Xue    <method name="visit" return="V"
8320*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8321*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8322*dc5640d1SHerbert Xue      deprecated="not deprecated">
8323*dc5640d1SHerbert Xue      <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8324*dc5640d1SHerbert Xue    </method>
8325*dc5640d1SHerbert Xue    <method name="visit" return="V"
8326*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8327*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8328*dc5640d1SHerbert Xue      deprecated="not deprecated">
8329*dc5640d1SHerbert Xue      <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8330*dc5640d1SHerbert Xue    </method>
8331*dc5640d1SHerbert Xue    <method name="visit" return="V"
8332*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8333*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8334*dc5640d1SHerbert Xue      deprecated="not deprecated">
8335*dc5640d1SHerbert Xue      <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
8336*dc5640d1SHerbert Xue    </method>
8337*dc5640d1SHerbert Xue    <method name="visit" return="V"
8338*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8339*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8340*dc5640d1SHerbert Xue      deprecated="not deprecated">
8341*dc5640d1SHerbert Xue      <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
8342*dc5640d1SHerbert Xue    </method>
8343*dc5640d1SHerbert Xue    <method name="visit" return="V"
8344*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8345*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8346*dc5640d1SHerbert Xue      deprecated="not deprecated">
8347*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8348*dc5640d1SHerbert Xue    </method>
8349*dc5640d1SHerbert Xue    <method name="visit" return="V"
8350*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8351*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8352*dc5640d1SHerbert Xue      deprecated="not deprecated">
8353*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8354*dc5640d1SHerbert Xue    </method>
8355*dc5640d1SHerbert Xue    <method name="visit" return="V"
8356*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8357*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8358*dc5640d1SHerbert Xue      deprecated="not deprecated">
8359*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8360*dc5640d1SHerbert Xue    </method>
8361*dc5640d1SHerbert Xue    <method name="visit" return="V"
8362*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8363*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8364*dc5640d1SHerbert Xue      deprecated="not deprecated">
8365*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8366*dc5640d1SHerbert Xue    </method>
8367*dc5640d1SHerbert Xue    <method name="visit" return="V"
8368*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8369*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8370*dc5640d1SHerbert Xue      deprecated="not deprecated">
8371*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8372*dc5640d1SHerbert Xue    </method>
8373*dc5640d1SHerbert Xue    <method name="visit" return="V"
8374*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8375*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8376*dc5640d1SHerbert Xue      deprecated="not deprecated">
8377*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8378*dc5640d1SHerbert Xue    </method>
8379*dc5640d1SHerbert Xue    <method name="visit" return="V"
8380*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8381*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8382*dc5640d1SHerbert Xue      deprecated="not deprecated">
8383*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8384*dc5640d1SHerbert Xue    </method>
8385*dc5640d1SHerbert Xue    <method name="visit" return="V"
8386*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8387*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8388*dc5640d1SHerbert Xue      deprecated="not deprecated">
8389*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8390*dc5640d1SHerbert Xue    </method>
8391*dc5640d1SHerbert Xue    <doc>
8392*dc5640d1SHerbert Xue    <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
8393*dc5640d1SHerbert Xue {@link #visitOther(Element)}, returning its result.
8394*dc5640d1SHerbert Xue
8395*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8396*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8397*dc5640d1SHerbert Xue
8398*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8399*dc5640d1SHerbert Xue @since 2.0]]>
8400*dc5640d1SHerbert Xue    </doc>
8401*dc5640d1SHerbert Xue  </class>
8402*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DefaultElementVisitor -->
8403*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Dependency -->
8404*dc5640d1SHerbert Xue  <class name="Dependency" extends="java.lang.Object"
8405*dc5640d1SHerbert Xue    abstract="false"
8406*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8407*dc5640d1SHerbert Xue    deprecated="not deprecated">
8408*dc5640d1SHerbert Xue    <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
8409*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8410*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8411*dc5640d1SHerbert Xue      deprecated="not deprecated">
8412*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
8413*dc5640d1SHerbert Xue      <doc>
8414*dc5640d1SHerbert Xue      <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
8415*dc5640d1SHerbert Xue nullable.]]>
8416*dc5640d1SHerbert Xue      </doc>
8417*dc5640d1SHerbert Xue    </method>
8418*dc5640d1SHerbert Xue    <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
8419*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8420*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8421*dc5640d1SHerbert Xue      deprecated="not deprecated">
8422*dc5640d1SHerbert Xue      <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
8423*dc5640d1SHerbert Xue      <doc>
8424*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies from the given injection points.]]>
8425*dc5640d1SHerbert Xue      </doc>
8426*dc5640d1SHerbert Xue    </method>
8427*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
8428*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8429*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8430*dc5640d1SHerbert Xue      deprecated="not deprecated">
8431*dc5640d1SHerbert Xue      <doc>
8432*dc5640d1SHerbert Xue      <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
8433*dc5640d1SHerbert Xue      </doc>
8434*dc5640d1SHerbert Xue    </method>
8435*dc5640d1SHerbert Xue    <method name="isNullable" return="boolean"
8436*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8437*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8438*dc5640d1SHerbert Xue      deprecated="not deprecated">
8439*dc5640d1SHerbert Xue      <doc>
8440*dc5640d1SHerbert Xue      <![CDATA[Returns true if null is a legal value for this dependency.]]>
8441*dc5640d1SHerbert Xue      </doc>
8442*dc5640d1SHerbert Xue    </method>
8443*dc5640d1SHerbert Xue    <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
8444*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8445*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8446*dc5640d1SHerbert Xue      deprecated="not deprecated">
8447*dc5640d1SHerbert Xue      <doc>
8448*dc5640d1SHerbert Xue      <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
8449*dc5640d1SHerbert Xue attached to a particular injection point.]]>
8450*dc5640d1SHerbert Xue      </doc>
8451*dc5640d1SHerbert Xue    </method>
8452*dc5640d1SHerbert Xue    <method name="getParameterIndex" return="int"
8453*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8454*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8455*dc5640d1SHerbert Xue      deprecated="not deprecated">
8456*dc5640d1SHerbert Xue      <doc>
8457*dc5640d1SHerbert Xue      <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
8458*dc5640d1SHerbert Xue this dependency does not belong to a parameter list. Only method and constuctor dependencies
8459*dc5640d1SHerbert Xue are elements in a parameter list.]]>
8460*dc5640d1SHerbert Xue      </doc>
8461*dc5640d1SHerbert Xue    </method>
8462*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
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    </method>
8467*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
8468*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8469*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8470*dc5640d1SHerbert Xue      deprecated="not deprecated">
8471*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
8472*dc5640d1SHerbert Xue    </method>
8473*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8474*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8475*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8476*dc5640d1SHerbert Xue      deprecated="not deprecated">
8477*dc5640d1SHerbert Xue    </method>
8478*dc5640d1SHerbert Xue    <doc>
8479*dc5640d1SHerbert Xue    <![CDATA[A variable that can be resolved by an injector.
8480*dc5640d1SHerbert Xue
8481*dc5640d1SHerbert Xue <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
8482*dc5640d1SHerbert Xue that's attached to a constructor, method or field.
8483*dc5640d1SHerbert Xue
8484*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8485*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8486*dc5640d1SHerbert Xue @since 2.0]]>
8487*dc5640d1SHerbert Xue    </doc>
8488*dc5640d1SHerbert Xue  </class>
8489*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Dependency -->
8490*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DependencyAndSource -->
8491*dc5640d1SHerbert Xue  <class name="DependencyAndSource" extends="java.lang.Object"
8492*dc5640d1SHerbert Xue    abstract="false"
8493*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8494*dc5640d1SHerbert Xue    deprecated="not deprecated">
8495*dc5640d1SHerbert Xue    <constructor name="DependencyAndSource" type="com.google.inject.spi.Dependency&lt;?&gt;, java.lang.Object"
8496*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8497*dc5640d1SHerbert Xue      deprecated="not deprecated">
8498*dc5640d1SHerbert Xue    </constructor>
8499*dc5640d1SHerbert Xue    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;?&gt;"
8500*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8501*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8502*dc5640d1SHerbert Xue      deprecated="not deprecated">
8503*dc5640d1SHerbert Xue      <doc>
8504*dc5640d1SHerbert Xue      <![CDATA[Returns the Dependency, if one exists. For anything that can be referenced
8505*dc5640d1SHerbert Xue by {@link Injector#getBinding}, a dependency exists. A dependency will not
8506*dc5640d1SHerbert Xue exist (and this will return null) for types initialized with
8507*dc5640d1SHerbert Xue {@link Binder#requestInjection} or {@link Injector#injectMembers(Object)},
8508*dc5640d1SHerbert Xue nor will it exist for objects injected into Providers bound with
8509*dc5640d1SHerbert Xue LinkedBindingBuilder#toProvider(Provider).]]>
8510*dc5640d1SHerbert Xue      </doc>
8511*dc5640d1SHerbert Xue    </method>
8512*dc5640d1SHerbert Xue    <method name="getBindingSource" return="java.lang.String"
8513*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8514*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8515*dc5640d1SHerbert Xue      deprecated="not deprecated">
8516*dc5640d1SHerbert Xue      <doc>
8517*dc5640d1SHerbert Xue      <![CDATA[Returns a string describing where this dependency was bound. If the binding
8518*dc5640d1SHerbert Xue was just-in-time, there is no valid binding source, so this describes the
8519*dc5640d1SHerbert Xue class in question.]]>
8520*dc5640d1SHerbert Xue      </doc>
8521*dc5640d1SHerbert Xue    </method>
8522*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8523*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8524*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8525*dc5640d1SHerbert Xue      deprecated="not deprecated">
8526*dc5640d1SHerbert Xue    </method>
8527*dc5640d1SHerbert Xue    <doc>
8528*dc5640d1SHerbert Xue    <![CDATA[A combination of a {@link Dependency} and the {@link Binding#getSource()
8529*dc5640d1SHerbert Xue source} where the dependency was bound.
8530*dc5640d1SHerbert Xue
8531*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8532*dc5640d1SHerbert Xue @since 4.0]]>
8533*dc5640d1SHerbert Xue    </doc>
8534*dc5640d1SHerbert Xue  </class>
8535*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DependencyAndSource -->
8536*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.DisableCircularProxiesOption -->
8537*dc5640d1SHerbert Xue  <class name="DisableCircularProxiesOption" extends="java.lang.Object"
8538*dc5640d1SHerbert Xue    abstract="false"
8539*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8540*dc5640d1SHerbert Xue    deprecated="not deprecated">
8541*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
8542*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8543*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8544*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8545*dc5640d1SHerbert Xue      deprecated="not deprecated">
8546*dc5640d1SHerbert Xue    </method>
8547*dc5640d1SHerbert Xue    <method name="applyTo"
8548*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8549*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8550*dc5640d1SHerbert Xue      deprecated="not deprecated">
8551*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8552*dc5640d1SHerbert Xue    </method>
8553*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8554*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8555*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8556*dc5640d1SHerbert Xue      deprecated="not deprecated">
8557*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8558*dc5640d1SHerbert Xue    </method>
8559*dc5640d1SHerbert Xue    <doc>
8560*dc5640d1SHerbert Xue    <![CDATA[A request to disable circular proxies.
8561*dc5640d1SHerbert Xue
8562*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
8563*dc5640d1SHerbert Xue @since 3.0]]>
8564*dc5640d1SHerbert Xue    </doc>
8565*dc5640d1SHerbert Xue  </class>
8566*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.DisableCircularProxiesOption -->
8567*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.Element -->
8568*dc5640d1SHerbert Xue  <interface name="Element"    abstract="true"
8569*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8570*dc5640d1SHerbert Xue    deprecated="not deprecated">
8571*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
8572*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8573*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8574*dc5640d1SHerbert Xue      deprecated="not deprecated">
8575*dc5640d1SHerbert Xue      <doc>
8576*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
8577*dc5640d1SHerbert Xue configured. Used by Guice in the production of descriptive error messages.
8578*dc5640d1SHerbert Xue
8579*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
8580*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
8581*dc5640d1SHerbert Xue unfamiliar.]]>
8582*dc5640d1SHerbert Xue      </doc>
8583*dc5640d1SHerbert Xue    </method>
8584*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
8585*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8586*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8587*dc5640d1SHerbert Xue      deprecated="not deprecated">
8588*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
8589*dc5640d1SHerbert Xue      <doc>
8590*dc5640d1SHerbert Xue      <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
8591*dc5640d1SHerbert Xue
8592*dc5640d1SHerbert Xue @param visitor to call back on]]>
8593*dc5640d1SHerbert Xue      </doc>
8594*dc5640d1SHerbert Xue    </method>
8595*dc5640d1SHerbert Xue    <method name="applyTo"
8596*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8597*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8598*dc5640d1SHerbert Xue      deprecated="not deprecated">
8599*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
8600*dc5640d1SHerbert Xue      <doc>
8601*dc5640d1SHerbert Xue      <![CDATA[Writes this module element to the given binder (optional operation).
8602*dc5640d1SHerbert Xue
8603*dc5640d1SHerbert Xue @param binder to apply configuration element to
8604*dc5640d1SHerbert Xue @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
8605*dc5640d1SHerbert Xue     element.]]>
8606*dc5640d1SHerbert Xue      </doc>
8607*dc5640d1SHerbert Xue    </method>
8608*dc5640d1SHerbert Xue    <doc>
8609*dc5640d1SHerbert Xue    <![CDATA[A core component of a module or injector.
8610*dc5640d1SHerbert Xue
8611*dc5640d1SHerbert Xue <p>The elements of a module can be inspected, validated and rewritten. Use {@link
8612*dc5640d1SHerbert Xue Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
8613*dc5640d1SHerbert Xue from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
8614*dc5640d1SHerbert Xue This can be used for static analysis and generation of Guice modules.
8615*dc5640d1SHerbert Xue
8616*dc5640d1SHerbert Xue <p>The elements of an injector can be inspected and exercised. Use {@link
8617*dc5640d1SHerbert Xue com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
8618*dc5640d1SHerbert Xue
8619*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8620*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
8621*dc5640d1SHerbert Xue @since 2.0]]>
8622*dc5640d1SHerbert Xue    </doc>
8623*dc5640d1SHerbert Xue  </interface>
8624*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.Element -->
8625*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Elements -->
8626*dc5640d1SHerbert Xue  <class name="Elements" extends="java.lang.Object"
8627*dc5640d1SHerbert Xue    abstract="false"
8628*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8629*dc5640d1SHerbert Xue    deprecated="not deprecated">
8630*dc5640d1SHerbert Xue    <constructor name="Elements"
8631*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8632*dc5640d1SHerbert Xue      deprecated="not deprecated">
8633*dc5640d1SHerbert Xue    </constructor>
8634*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8635*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8636*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8637*dc5640d1SHerbert Xue      deprecated="not deprecated">
8638*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
8639*dc5640d1SHerbert Xue      <doc>
8640*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8641*dc5640d1SHerbert Xue      </doc>
8642*dc5640d1SHerbert Xue    </method>
8643*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8644*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8645*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8646*dc5640d1SHerbert Xue      deprecated="not deprecated">
8647*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
8648*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
8649*dc5640d1SHerbert Xue      <doc>
8650*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8651*dc5640d1SHerbert Xue      </doc>
8652*dc5640d1SHerbert Xue    </method>
8653*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8654*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8655*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8656*dc5640d1SHerbert Xue      deprecated="not deprecated">
8657*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8658*dc5640d1SHerbert Xue      <doc>
8659*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8660*dc5640d1SHerbert Xue      </doc>
8661*dc5640d1SHerbert Xue    </method>
8662*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
8663*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8664*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8665*dc5640d1SHerbert Xue      deprecated="not deprecated">
8666*dc5640d1SHerbert Xue      <param name="stage" type="com.google.inject.Stage"/>
8667*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
8668*dc5640d1SHerbert Xue      <doc>
8669*dc5640d1SHerbert Xue      <![CDATA[Records the elements executed by {@code modules}.]]>
8670*dc5640d1SHerbert Xue      </doc>
8671*dc5640d1SHerbert Xue    </method>
8672*dc5640d1SHerbert Xue    <method name="getModule" return="com.google.inject.Module"
8673*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8674*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
8675*dc5640d1SHerbert Xue      deprecated="not deprecated">
8676*dc5640d1SHerbert Xue      <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
8677*dc5640d1SHerbert Xue      <doc>
8678*dc5640d1SHerbert Xue      <![CDATA[Returns the module composed of {@code elements}.]]>
8679*dc5640d1SHerbert Xue      </doc>
8680*dc5640d1SHerbert Xue    </method>
8681*dc5640d1SHerbert Xue    <doc>
8682*dc5640d1SHerbert Xue    <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
8683*dc5640d1SHerbert Xue Element#applyTo(Binder) rewritten}.
8684*dc5640d1SHerbert Xue
8685*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
8686*dc5640d1SHerbert Xue @since 2.0]]>
8687*dc5640d1SHerbert Xue    </doc>
8688*dc5640d1SHerbert Xue  </class>
8689*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Elements -->
8690*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ElementSource -->
8691*dc5640d1SHerbert Xue  <class name="ElementSource" extends="java.lang.Object"
8692*dc5640d1SHerbert Xue    abstract="false"
8693*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
8694*dc5640d1SHerbert Xue    deprecated="not deprecated">
8695*dc5640d1SHerbert Xue    <method name="getOriginalElementSource" return="com.google.inject.spi.ElementSource"
8696*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8697*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8698*dc5640d1SHerbert Xue      deprecated="not deprecated">
8699*dc5640d1SHerbert Xue      <doc>
8700*dc5640d1SHerbert Xue      <![CDATA[Returns the {@link ElementSource} of the element this was created or copied from. If this was
8701*dc5640d1SHerbert Xue not created or copied from another element, returns {@code null}.]]>
8702*dc5640d1SHerbert Xue      </doc>
8703*dc5640d1SHerbert Xue    </method>
8704*dc5640d1SHerbert Xue    <method name="getDeclaringSource" return="java.lang.Object"
8705*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8706*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8707*dc5640d1SHerbert Xue      deprecated="not deprecated">
8708*dc5640d1SHerbert Xue      <doc>
8709*dc5640d1SHerbert Xue      <![CDATA[Returns a single location in source code that defines the element. It can be any object
8710*dc5640d1SHerbert Xue such as {@link java.lang.reflect.Constructor}, {@link java.lang.reflect.Method},
8711*dc5640d1SHerbert Xue {@link java.lang.reflect.Field}, {@link StackTraceElement}, etc. For
8712*dc5640d1SHerbert Xue example, if the element is created from a method annotated by {@literal @Provides}, the
8713*dc5640d1SHerbert Xue declaring source of element would be the method itself.]]>
8714*dc5640d1SHerbert Xue      </doc>
8715*dc5640d1SHerbert Xue    </method>
8716*dc5640d1SHerbert Xue    <method name="getModuleClassNames" return="java.util.List&lt;java.lang.String&gt;"
8717*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8718*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8719*dc5640d1SHerbert Xue      deprecated="not deprecated">
8720*dc5640d1SHerbert Xue      <doc>
8721*dc5640d1SHerbert Xue      <![CDATA[Returns the class names of modules involved in creating this {@link Element}. The first
8722*dc5640d1SHerbert Xue element (index 0) is the class name of module that defined the element, and the last element
8723*dc5640d1SHerbert Xue is the class name of root module.]]>
8724*dc5640d1SHerbert Xue      </doc>
8725*dc5640d1SHerbert Xue    </method>
8726*dc5640d1SHerbert Xue    <method name="getModuleConfigurePositionsInStackTrace" return="java.util.List&lt;java.lang.Integer&gt;"
8727*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8728*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8729*dc5640d1SHerbert Xue      deprecated="not deprecated">
8730*dc5640d1SHerbert Xue      <doc>
8731*dc5640d1SHerbert Xue      <![CDATA[Returns the position of {@link com.google.inject.Module#configure configure(Binder)} method
8732*dc5640d1SHerbert Xue call in the {@link #getStackTrace stack trace} for modules that their classes returned by
8733*dc5640d1SHerbert Xue {@link #getModuleClassNames}. For example, if the stack trace looks like the following:
8734*dc5640d1SHerbert Xue <p>
8735*dc5640d1SHerbert Xue {@code
8736*dc5640d1SHerbert Xue  0 - Binder.bind(),
8737*dc5640d1SHerbert Xue  1 - ModuleTwo.configure(),
8738*dc5640d1SHerbert Xue  2 - Binder.install(),
8739*dc5640d1SHerbert Xue  3 - ModuleOne.configure(),
8740*dc5640d1SHerbert Xue  4 - theRest().
8741*dc5640d1SHerbert Xue }
8742*dc5640d1SHerbert Xue <p>
8743*dc5640d1SHerbert Xue 1 and 3 are returned.
8744*dc5640d1SHerbert Xue <p>
8745*dc5640d1SHerbert Xue In the cases where stack trace is not available (i.e., the stack trace was not collected),
8746*dc5640d1SHerbert Xue it returns -1 for all module positions.]]>
8747*dc5640d1SHerbert Xue      </doc>
8748*dc5640d1SHerbert Xue    </method>
8749*dc5640d1SHerbert Xue    <method name="getStackTrace" return="java.lang.StackTraceElement[]"
8750*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8751*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8752*dc5640d1SHerbert Xue      deprecated="not deprecated">
8753*dc5640d1SHerbert Xue      <doc>
8754*dc5640d1SHerbert Xue      <![CDATA[Returns the sequence of method calls that ends at one of {@link com.google.inject.Binder}
8755*dc5640d1SHerbert Xue {@code bindXXX()} methods and eventually defines the element. Note that
8756*dc5640d1SHerbert Xue {@link #getStackTrace} lists {@link StackTraceElement StackTraceElements} in reverse
8757*dc5640d1SHerbert Xue chronological order. The first element (index zero) is the last method call and the last
8758*dc5640d1SHerbert Xue element is the first method invocation. In the cases where stack trace is not available
8759*dc5640d1SHerbert Xue (i.e.,the stack trace was not collected), it returns an empty array.]]>
8760*dc5640d1SHerbert Xue      </doc>
8761*dc5640d1SHerbert Xue    </method>
8762*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
8763*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
8764*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8765*dc5640d1SHerbert Xue      deprecated="not deprecated">
8766*dc5640d1SHerbert Xue      <doc>
8767*dc5640d1SHerbert Xue      <![CDATA[Returns {@code getDeclaringSource().toString()} value.]]>
8768*dc5640d1SHerbert Xue      </doc>
8769*dc5640d1SHerbert Xue    </method>
8770*dc5640d1SHerbert Xue    <doc>
8771*dc5640d1SHerbert Xue    <![CDATA[Contains information about where and how an {@link Element element} was
8772*dc5640d1SHerbert Xue bound.
8773*dc5640d1SHerbert Xue <p>
8774*dc5640d1SHerbert Xue The {@link #getDeclaringSource() declaring source} refers to a location in
8775*dc5640d1SHerbert Xue source code that defines the Guice {@link Element element}. For example, if
8776*dc5640d1SHerbert Xue the element is created from a method annotated by {@literal @Provides}, the
8777*dc5640d1SHerbert Xue declaring source of element would be the method itself.
8778*dc5640d1SHerbert Xue <p>
8779*dc5640d1SHerbert Xue The {@link #getStackTrace()} refers to the sequence of calls ends at one of
8780*dc5640d1SHerbert Xue {@link com.google.inject.Binder} {@code bindXXX()} methods and eventually
8781*dc5640d1SHerbert Xue defines the element. Note that {@link #getStackTrace()} lists
8782*dc5640d1SHerbert Xue {@link StackTraceElement StackTraceElements} in reverse chronological order.
8783*dc5640d1SHerbert Xue The first element (index zero) is the last method call and the last element
8784*dc5640d1SHerbert Xue is the first method invocation. By default, the stack trace is not collected.
8785*dc5640d1SHerbert Xue The default behavior can be changed by setting the
8786*dc5640d1SHerbert Xue {@code guice_include_stack_traces} flag value. The value can be either
8787*dc5640d1SHerbert Xue {@code OFF}, {@code ONLY_FOR_DECLARING_SOURCE} or {@code COMPLETE}. Note that
8788*dc5640d1SHerbert Xue collecting stack traces for every binding can cause a performance hit when
8789*dc5640d1SHerbert Xue the injector is created.
8790*dc5640d1SHerbert Xue <p>
8791*dc5640d1SHerbert Xue The sequence of class names of {@link com.google.inject.Module modules}
8792*dc5640d1SHerbert Xue involved in the element creation can be retrieved by
8793*dc5640d1SHerbert Xue {@link #getModuleClassNames()}. Similar to {@link #getStackTrace()}, the
8794*dc5640d1SHerbert Xue order is reverse chronological. The first module (index 0) is the module that
8795*dc5640d1SHerbert Xue installs the {@link Element element}. The last module is the root module.
8796*dc5640d1SHerbert Xue <p>
8797*dc5640d1SHerbert Xue In order to support the cases where a Guice {@link Element element} is
8798*dc5640d1SHerbert Xue created from another Guice {@link Element element} (original) (e.g., by
8799*dc5640d1SHerbert Xue {@link Element#applyTo}), it also provides a reference to the original
8800*dc5640d1SHerbert Xue element source ({@link #getOriginalElementSource()}).
8801*dc5640d1SHerbert Xue
8802*dc5640d1SHerbert Xue @since 4.0]]>
8803*dc5640d1SHerbert Xue    </doc>
8804*dc5640d1SHerbert Xue  </class>
8805*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ElementSource -->
8806*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ElementVisitor -->
8807*dc5640d1SHerbert Xue  <interface name="ElementVisitor"    abstract="true"
8808*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8809*dc5640d1SHerbert Xue    deprecated="not deprecated">
8810*dc5640d1SHerbert Xue    <method name="visit" return="V"
8811*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8812*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8813*dc5640d1SHerbert Xue      deprecated="not deprecated">
8814*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
8815*dc5640d1SHerbert Xue      <doc>
8816*dc5640d1SHerbert Xue      <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
8817*dc5640d1SHerbert Xue instances of the type.]]>
8818*dc5640d1SHerbert Xue      </doc>
8819*dc5640d1SHerbert Xue    </method>
8820*dc5640d1SHerbert Xue    <method name="visit" return="V"
8821*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8822*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8823*dc5640d1SHerbert Xue      deprecated="not deprecated">
8824*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
8825*dc5640d1SHerbert Xue      <doc>
8826*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
8827*dc5640d1SHerbert Xue      </doc>
8828*dc5640d1SHerbert Xue    </method>
8829*dc5640d1SHerbert Xue    <method name="visit" return="V"
8830*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8831*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8832*dc5640d1SHerbert Xue      deprecated="not deprecated">
8833*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
8834*dc5640d1SHerbert Xue      <doc>
8835*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
8836*dc5640d1SHerbert Xue      </doc>
8837*dc5640d1SHerbert Xue    </method>
8838*dc5640d1SHerbert Xue    <method name="visit" return="V"
8839*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8840*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8841*dc5640d1SHerbert Xue      deprecated="not deprecated">
8842*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
8843*dc5640d1SHerbert Xue      <doc>
8844*dc5640d1SHerbert Xue      <![CDATA[Visit a registration of type converters for matching target types.]]>
8845*dc5640d1SHerbert Xue      </doc>
8846*dc5640d1SHerbert Xue    </method>
8847*dc5640d1SHerbert Xue    <method name="visit" return="V"
8848*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8849*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8850*dc5640d1SHerbert Xue      deprecated="not deprecated">
8851*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.InjectionRequest&lt;?&gt;"/>
8852*dc5640d1SHerbert Xue      <doc>
8853*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
8854*dc5640d1SHerbert Xue      </doc>
8855*dc5640d1SHerbert Xue    </method>
8856*dc5640d1SHerbert Xue    <method name="visit" return="V"
8857*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8858*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8859*dc5640d1SHerbert Xue      deprecated="not deprecated">
8860*dc5640d1SHerbert Xue      <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
8861*dc5640d1SHerbert Xue      <doc>
8862*dc5640d1SHerbert Xue      <![CDATA[Visit a request to inject the static fields and methods of type.]]>
8863*dc5640d1SHerbert Xue      </doc>
8864*dc5640d1SHerbert Xue    </method>
8865*dc5640d1SHerbert Xue    <method name="visit" return="V"
8866*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8867*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8868*dc5640d1SHerbert Xue      deprecated="not deprecated">
8869*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
8870*dc5640d1SHerbert Xue      <doc>
8871*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the provider for a type.]]>
8872*dc5640d1SHerbert Xue      </doc>
8873*dc5640d1SHerbert Xue    </method>
8874*dc5640d1SHerbert Xue    <method name="visit" return="V"
8875*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8876*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8877*dc5640d1SHerbert Xue      deprecated="not deprecated">
8878*dc5640d1SHerbert Xue      <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
8879*dc5640d1SHerbert Xue      <doc>
8880*dc5640d1SHerbert Xue      <![CDATA[Visit a lookup of the members injector.]]>
8881*dc5640d1SHerbert Xue      </doc>
8882*dc5640d1SHerbert Xue    </method>
8883*dc5640d1SHerbert Xue    <method name="visit" return="V"
8884*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8885*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8886*dc5640d1SHerbert Xue      deprecated="not deprecated">
8887*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
8888*dc5640d1SHerbert Xue      <doc>
8889*dc5640d1SHerbert Xue      <![CDATA[Visit an error message and the context in which it occured.]]>
8890*dc5640d1SHerbert Xue      </doc>
8891*dc5640d1SHerbert Xue    </method>
8892*dc5640d1SHerbert Xue    <method name="visit" return="V"
8893*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8894*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8895*dc5640d1SHerbert Xue      deprecated="not deprecated">
8896*dc5640d1SHerbert Xue      <param name="elements" type="com.google.inject.spi.PrivateElements"/>
8897*dc5640d1SHerbert Xue      <doc>
8898*dc5640d1SHerbert Xue      <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
8899*dc5640d1SHerbert Xue private binder}.]]>
8900*dc5640d1SHerbert Xue      </doc>
8901*dc5640d1SHerbert Xue    </method>
8902*dc5640d1SHerbert Xue    <method name="visit" return="V"
8903*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8904*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8905*dc5640d1SHerbert Xue      deprecated="not deprecated">
8906*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
8907*dc5640d1SHerbert Xue      <doc>
8908*dc5640d1SHerbert Xue      <![CDATA[Visit an injectable type listener binding.]]>
8909*dc5640d1SHerbert Xue      </doc>
8910*dc5640d1SHerbert Xue    </method>
8911*dc5640d1SHerbert Xue    <method name="visit" return="V"
8912*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8913*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8914*dc5640d1SHerbert Xue      deprecated="not deprecated">
8915*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProvisionListenerBinding"/>
8916*dc5640d1SHerbert Xue      <doc>
8917*dc5640d1SHerbert Xue      <![CDATA[Visit a provision listener binding.
8918*dc5640d1SHerbert Xue
8919*dc5640d1SHerbert Xue @since 4.0]]>
8920*dc5640d1SHerbert Xue      </doc>
8921*dc5640d1SHerbert Xue    </method>
8922*dc5640d1SHerbert Xue    <method name="visit" return="V"
8923*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8924*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8925*dc5640d1SHerbert Xue      deprecated="not deprecated">
8926*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExplicitBindingsOption"/>
8927*dc5640d1SHerbert Xue      <doc>
8928*dc5640d1SHerbert Xue      <![CDATA[Visit a require explicit bindings command.
8929*dc5640d1SHerbert Xue
8930*dc5640d1SHerbert Xue @since 3.0]]>
8931*dc5640d1SHerbert Xue      </doc>
8932*dc5640d1SHerbert Xue    </method>
8933*dc5640d1SHerbert Xue    <method name="visit" return="V"
8934*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8935*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8936*dc5640d1SHerbert Xue      deprecated="not deprecated">
8937*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.DisableCircularProxiesOption"/>
8938*dc5640d1SHerbert Xue      <doc>
8939*dc5640d1SHerbert Xue      <![CDATA[Visit a disable circular proxies command.
8940*dc5640d1SHerbert Xue
8941*dc5640d1SHerbert Xue @since 3.0]]>
8942*dc5640d1SHerbert Xue      </doc>
8943*dc5640d1SHerbert Xue    </method>
8944*dc5640d1SHerbert Xue    <method name="visit" return="V"
8945*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8946*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8947*dc5640d1SHerbert Xue      deprecated="not deprecated">
8948*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireAtInjectOnConstructorsOption"/>
8949*dc5640d1SHerbert Xue      <doc>
8950*dc5640d1SHerbert Xue      <![CDATA[Visit a require explicit {@literal @}{@link Inject} command.
8951*dc5640d1SHerbert Xue
8952*dc5640d1SHerbert Xue @since 4.0]]>
8953*dc5640d1SHerbert Xue      </doc>
8954*dc5640d1SHerbert Xue    </method>
8955*dc5640d1SHerbert Xue    <method name="visit" return="V"
8956*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8957*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8958*dc5640d1SHerbert Xue      deprecated="not deprecated">
8959*dc5640d1SHerbert Xue      <param name="option" type="com.google.inject.spi.RequireExactBindingAnnotationsOption"/>
8960*dc5640d1SHerbert Xue      <doc>
8961*dc5640d1SHerbert Xue      <![CDATA[Visit a require exact binding annotations command.
8962*dc5640d1SHerbert Xue
8963*dc5640d1SHerbert Xue @since 4.0]]>
8964*dc5640d1SHerbert Xue      </doc>
8965*dc5640d1SHerbert Xue    </method>
8966*dc5640d1SHerbert Xue    <method name="visit" return="V"
8967*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8968*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8969*dc5640d1SHerbert Xue      deprecated="not deprecated">
8970*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ModuleAnnotatedMethodScannerBinding"/>
8971*dc5640d1SHerbert Xue      <doc>
8972*dc5640d1SHerbert Xue      <![CDATA[Visits a {@link Binder#scanModulesForAnnotatedMethods} command.
8973*dc5640d1SHerbert Xue
8974*dc5640d1SHerbert Xue @since 4.0]]>
8975*dc5640d1SHerbert Xue      </doc>
8976*dc5640d1SHerbert Xue    </method>
8977*dc5640d1SHerbert Xue    <doc>
8978*dc5640d1SHerbert Xue    <![CDATA[Visit elements.
8979*dc5640d1SHerbert Xue
8980*dc5640d1SHerbert Xue @param <V> any type to be returned by the visit method. Use {@link Void} with
8981*dc5640d1SHerbert Xue     {@code return null} if no return type is needed.
8982*dc5640d1SHerbert Xue
8983*dc5640d1SHerbert Xue @since 2.0]]>
8984*dc5640d1SHerbert Xue    </doc>
8985*dc5640d1SHerbert Xue  </interface>
8986*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ElementVisitor -->
8987*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ExposedBinding -->
8988*dc5640d1SHerbert Xue  <interface name="ExposedBinding"    abstract="true"
8989*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
8990*dc5640d1SHerbert Xue    deprecated="not deprecated">
8991*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
8992*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
8993*dc5640d1SHerbert Xue    <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
8994*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
8995*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
8996*dc5640d1SHerbert Xue      deprecated="not deprecated">
8997*dc5640d1SHerbert Xue      <doc>
8998*dc5640d1SHerbert Xue      <![CDATA[Returns the enclosed environment that holds the original binding.]]>
8999*dc5640d1SHerbert Xue      </doc>
9000*dc5640d1SHerbert Xue    </method>
9001*dc5640d1SHerbert Xue    <method name="applyTo"
9002*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9003*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9004*dc5640d1SHerbert Xue      deprecated="not deprecated">
9005*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9006*dc5640d1SHerbert Xue      <doc>
9007*dc5640d1SHerbert Xue      <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
9008*dc5640d1SHerbert Xue      </doc>
9009*dc5640d1SHerbert Xue    </method>
9010*dc5640d1SHerbert Xue    <doc>
9011*dc5640d1SHerbert Xue    <![CDATA[A binding to a key exposed from an enclosed private environment.
9012*dc5640d1SHerbert Xue
9013*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9014*dc5640d1SHerbert Xue @since 2.0]]>
9015*dc5640d1SHerbert Xue    </doc>
9016*dc5640d1SHerbert Xue  </interface>
9017*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ExposedBinding -->
9018*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.HasDependencies -->
9019*dc5640d1SHerbert Xue  <interface name="HasDependencies"    abstract="true"
9020*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9021*dc5640d1SHerbert Xue    deprecated="not deprecated">
9022*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9023*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9024*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9025*dc5640d1SHerbert Xue      deprecated="not deprecated">
9026*dc5640d1SHerbert Xue      <doc>
9027*dc5640d1SHerbert Xue      <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
9028*dc5640d1SHerbert Xue known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
9029*dc5640d1SHerbert Xue included in the returned set.
9030*dc5640d1SHerbert Xue
9031*dc5640d1SHerbert Xue @return a possibly empty set]]>
9032*dc5640d1SHerbert Xue      </doc>
9033*dc5640d1SHerbert Xue    </method>
9034*dc5640d1SHerbert Xue    <doc>
9035*dc5640d1SHerbert Xue    <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
9036*dc5640d1SHerbert Xue providers} and instances that expose their dependencies explicitly.
9037*dc5640d1SHerbert Xue
9038*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9039*dc5640d1SHerbert Xue @since 2.0]]>
9040*dc5640d1SHerbert Xue    </doc>
9041*dc5640d1SHerbert Xue  </interface>
9042*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.HasDependencies -->
9043*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InjectionListener -->
9044*dc5640d1SHerbert Xue  <interface name="InjectionListener"    abstract="true"
9045*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9046*dc5640d1SHerbert Xue    deprecated="not deprecated">
9047*dc5640d1SHerbert Xue    <method name="afterInjection"
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="injectee" type="I"/>
9052*dc5640d1SHerbert Xue      <doc>
9053*dc5640d1SHerbert Xue      <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
9054*dc5640d1SHerbert Xue
9055*dc5640d1SHerbert Xue @param injectee instance that Guice injected dependencies into]]>
9056*dc5640d1SHerbert Xue      </doc>
9057*dc5640d1SHerbert Xue    </method>
9058*dc5640d1SHerbert Xue    <doc>
9059*dc5640d1SHerbert Xue    <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
9060*dc5640d1SHerbert Xue injections, post-injection initialization, and more.
9061*dc5640d1SHerbert Xue
9062*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9063*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9064*dc5640d1SHerbert Xue @since 2.0]]>
9065*dc5640d1SHerbert Xue    </doc>
9066*dc5640d1SHerbert Xue  </interface>
9067*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InjectionListener -->
9068*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionPoint -->
9069*dc5640d1SHerbert Xue  <class name="InjectionPoint" extends="java.lang.Object"
9070*dc5640d1SHerbert Xue    abstract="false"
9071*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9072*dc5640d1SHerbert Xue    deprecated="not deprecated">
9073*dc5640d1SHerbert Xue    <method name="getMember" return="java.lang.reflect.Member"
9074*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9075*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9076*dc5640d1SHerbert Xue      deprecated="not deprecated">
9077*dc5640d1SHerbert Xue      <doc>
9078*dc5640d1SHerbert Xue      <![CDATA[Returns the injected constructor, field, or method.]]>
9079*dc5640d1SHerbert Xue      </doc>
9080*dc5640d1SHerbert Xue    </method>
9081*dc5640d1SHerbert Xue    <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
9082*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9083*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9084*dc5640d1SHerbert Xue      deprecated="not deprecated">
9085*dc5640d1SHerbert Xue      <doc>
9086*dc5640d1SHerbert Xue      <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
9087*dc5640d1SHerbert Xue constructor, the dependencies will correspond to that member's parameters. Field injection
9088*dc5640d1SHerbert Xue points always have a single dependency for the field itself.
9089*dc5640d1SHerbert Xue
9090*dc5640d1SHerbert Xue @return a possibly-empty list]]>
9091*dc5640d1SHerbert Xue      </doc>
9092*dc5640d1SHerbert Xue    </method>
9093*dc5640d1SHerbert Xue    <method name="isOptional" return="boolean"
9094*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9095*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9096*dc5640d1SHerbert Xue      deprecated="not deprecated">
9097*dc5640d1SHerbert Xue      <doc>
9098*dc5640d1SHerbert Xue      <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
9099*dc5640d1SHerbert Xue for all required dependencies. Both explicit bindings (as specified in a module), and implicit
9100*dc5640d1SHerbert Xue bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
9101*dc5640d1SHerbert Xue constructors etc.) may be used to satisfy optional injection points.]]>
9102*dc5640d1SHerbert Xue      </doc>
9103*dc5640d1SHerbert Xue    </method>
9104*dc5640d1SHerbert Xue    <method name="isToolable" return="boolean"
9105*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9106*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9107*dc5640d1SHerbert Xue      deprecated="not deprecated">
9108*dc5640d1SHerbert Xue      <doc>
9109*dc5640d1SHerbert Xue      <![CDATA[Returns true if the element is annotated with {@literal @}{@link Toolable}.
9110*dc5640d1SHerbert Xue
9111*dc5640d1SHerbert Xue @since 3.0]]>
9112*dc5640d1SHerbert Xue      </doc>
9113*dc5640d1SHerbert Xue    </method>
9114*dc5640d1SHerbert Xue    <method name="getDeclaringType" return="com.google.inject.TypeLiteral&lt;?&gt;"
9115*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9116*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9117*dc5640d1SHerbert Xue      deprecated="not deprecated">
9118*dc5640d1SHerbert Xue      <doc>
9119*dc5640d1SHerbert Xue      <![CDATA[Returns the generic type that defines this injection point. If the member exists on a
9120*dc5640d1SHerbert Xue parameterized type, the result will include more type information than the member's {@link
9121*dc5640d1SHerbert Xue Member#getDeclaringClass() raw declaring class}.
9122*dc5640d1SHerbert Xue
9123*dc5640d1SHerbert Xue @since 3.0]]>
9124*dc5640d1SHerbert Xue      </doc>
9125*dc5640d1SHerbert Xue    </method>
9126*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
9127*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9128*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9129*dc5640d1SHerbert Xue      deprecated="not deprecated">
9130*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
9131*dc5640d1SHerbert Xue    </method>
9132*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
9133*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9134*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9135*dc5640d1SHerbert Xue      deprecated="not deprecated">
9136*dc5640d1SHerbert Xue    </method>
9137*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9138*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9139*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9140*dc5640d1SHerbert Xue      deprecated="not deprecated">
9141*dc5640d1SHerbert Xue    </method>
9142*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9143*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9144*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9145*dc5640d1SHerbert Xue      deprecated="not deprecated">
9146*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9147*dc5640d1SHerbert Xue      <doc>
9148*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor. If the declaring type of {@code
9149*dc5640d1SHerbert Xue constructor} is parameterized (such as {@code List<T>}), prefer the overload that includes a
9150*dc5640d1SHerbert Xue type literal.
9151*dc5640d1SHerbert Xue
9152*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
9153*dc5640d1SHerbert Xue
9154*dc5640d1SHerbert Xue @since 3.0]]>
9155*dc5640d1SHerbert Xue      </doc>
9156*dc5640d1SHerbert Xue    </method>
9157*dc5640d1SHerbert Xue    <method name="forConstructor" return="com.google.inject.spi.InjectionPoint"
9158*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9159*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9160*dc5640d1SHerbert Xue      deprecated="not deprecated">
9161*dc5640d1SHerbert Xue      <param name="constructor" type="java.lang.reflect.Constructor&lt;T&gt;"/>
9162*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
9163*dc5640d1SHerbert Xue      <doc>
9164*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified constructor of {@code type}.
9165*dc5640d1SHerbert Xue
9166*dc5640d1SHerbert Xue @param constructor any single constructor present on {@code type}.
9167*dc5640d1SHerbert Xue @param type the concrete type that defines {@code constructor}.
9168*dc5640d1SHerbert Xue
9169*dc5640d1SHerbert Xue @since 3.0]]>
9170*dc5640d1SHerbert Xue      </doc>
9171*dc5640d1SHerbert Xue    </method>
9172*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9173*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9174*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9175*dc5640d1SHerbert Xue      deprecated="not deprecated">
9176*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9177*dc5640d1SHerbert Xue      <doc>
9178*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9179*dc5640d1SHerbert Xue
9180*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9181*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
9182*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
9183*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
9184*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
9185*dc5640d1SHerbert Xue      </doc>
9186*dc5640d1SHerbert Xue    </method>
9187*dc5640d1SHerbert Xue    <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
9188*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9189*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9190*dc5640d1SHerbert Xue      deprecated="not deprecated">
9191*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9192*dc5640d1SHerbert Xue      <doc>
9193*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
9194*dc5640d1SHerbert Xue
9195*dc5640d1SHerbert Xue @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
9196*dc5640d1SHerbert Xue     or a no-arguments constructor that is not private.
9197*dc5640d1SHerbert Xue @throws ConfigurationException if there is no injectable constructor, more than one injectable
9198*dc5640d1SHerbert Xue     constructor, or if parameters of the injectable constructor are malformed, such as a
9199*dc5640d1SHerbert Xue     parameter with multiple binding annotations.]]>
9200*dc5640d1SHerbert Xue      </doc>
9201*dc5640d1SHerbert Xue    </method>
9202*dc5640d1SHerbert Xue    <method name="forMethod" return="com.google.inject.spi.InjectionPoint"
9203*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9204*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9205*dc5640d1SHerbert Xue      deprecated="not deprecated">
9206*dc5640d1SHerbert Xue      <param name="method" type="java.lang.reflect.Method"/>
9207*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
9208*dc5640d1SHerbert Xue      <doc>
9209*dc5640d1SHerbert Xue      <![CDATA[Returns a new injection point for the specified method of {@code type}.
9210*dc5640d1SHerbert Xue This is useful for extensions that need to build dependency graphs from
9211*dc5640d1SHerbert Xue arbitrary methods.
9212*dc5640d1SHerbert Xue
9213*dc5640d1SHerbert Xue @param method any single method present on {@code type}.
9214*dc5640d1SHerbert Xue @param type the concrete type that defines {@code method}.
9215*dc5640d1SHerbert Xue
9216*dc5640d1SHerbert Xue @since 4.0]]>
9217*dc5640d1SHerbert Xue      </doc>
9218*dc5640d1SHerbert Xue    </method>
9219*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9220*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9221*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9222*dc5640d1SHerbert Xue      deprecated="not deprecated">
9223*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9224*dc5640d1SHerbert Xue      <doc>
9225*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
9226*dc5640d1SHerbert Xue
9227*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9228*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9229*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9230*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9231*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9232*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9233*dc5640d1SHerbert Xue      of the valid injection points.]]>
9234*dc5640d1SHerbert Xue      </doc>
9235*dc5640d1SHerbert Xue    </method>
9236*dc5640d1SHerbert Xue    <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9237*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9238*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9239*dc5640d1SHerbert Xue      deprecated="not deprecated">
9240*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9241*dc5640d1SHerbert Xue      <doc>
9242*dc5640d1SHerbert Xue      <![CDATA[Returns all static method and field injection points on {@code type}.
9243*dc5640d1SHerbert Xue
9244*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9245*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9246*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9247*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9248*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9249*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9250*dc5640d1SHerbert Xue      of the valid injection points.]]>
9251*dc5640d1SHerbert Xue      </doc>
9252*dc5640d1SHerbert Xue    </method>
9253*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9254*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9255*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9256*dc5640d1SHerbert Xue      deprecated="not deprecated">
9257*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
9258*dc5640d1SHerbert Xue      <doc>
9259*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
9260*dc5640d1SHerbert Xue
9261*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9262*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9263*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9264*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9265*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9266*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9267*dc5640d1SHerbert Xue      of the valid injection points.]]>
9268*dc5640d1SHerbert Xue      </doc>
9269*dc5640d1SHerbert Xue    </method>
9270*dc5640d1SHerbert Xue    <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9271*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9272*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
9273*dc5640d1SHerbert Xue      deprecated="not deprecated">
9274*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;?&gt;"/>
9275*dc5640d1SHerbert Xue      <doc>
9276*dc5640d1SHerbert Xue      <![CDATA[Returns all instance method and field injection points on {@code type}.
9277*dc5640d1SHerbert Xue
9278*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9279*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9280*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9281*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
9282*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
9283*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9284*dc5640d1SHerbert Xue      of the valid injection points.]]>
9285*dc5640d1SHerbert Xue      </doc>
9286*dc5640d1SHerbert Xue    </method>
9287*dc5640d1SHerbert Xue    <doc>
9288*dc5640d1SHerbert Xue    <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
9289*dc5640d1SHerbert Xue {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
9290*dc5640d1SHerbert Xue omit the annotation.
9291*dc5640d1SHerbert Xue
9292*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9293*dc5640d1SHerbert Xue @since 2.0]]>
9294*dc5640d1SHerbert Xue    </doc>
9295*dc5640d1SHerbert Xue  </class>
9296*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionPoint -->
9297*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InjectionRequest -->
9298*dc5640d1SHerbert Xue  <class name="InjectionRequest" extends="java.lang.Object"
9299*dc5640d1SHerbert Xue    abstract="false"
9300*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9301*dc5640d1SHerbert Xue    deprecated="not deprecated">
9302*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9303*dc5640d1SHerbert Xue    <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
9304*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9305*dc5640d1SHerbert Xue      deprecated="not deprecated">
9306*dc5640d1SHerbert Xue    </constructor>
9307*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9308*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9309*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9310*dc5640d1SHerbert Xue      deprecated="not deprecated">
9311*dc5640d1SHerbert Xue    </method>
9312*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
9313*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9314*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9315*dc5640d1SHerbert Xue      deprecated="not deprecated">
9316*dc5640d1SHerbert Xue    </method>
9317*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9318*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9319*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9320*dc5640d1SHerbert Xue      deprecated="not deprecated">
9321*dc5640d1SHerbert Xue    </method>
9322*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9323*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9324*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9325*dc5640d1SHerbert Xue      deprecated="not deprecated">
9326*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
9327*dc5640d1SHerbert Xue      <doc>
9328*dc5640d1SHerbert Xue      <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
9329*dc5640d1SHerbert Xue this request.
9330*dc5640d1SHerbert Xue
9331*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
9332*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
9333*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
9334*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on the class of {@code
9335*dc5640d1SHerbert Xue      instance}, such as a field with multiple binding annotations. The exception's {@link
9336*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
9337*dc5640d1SHerbert Xue      of the valid injection points.]]>
9338*dc5640d1SHerbert Xue      </doc>
9339*dc5640d1SHerbert Xue    </method>
9340*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="R"
9341*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9342*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9343*dc5640d1SHerbert Xue      deprecated="not deprecated">
9344*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
9345*dc5640d1SHerbert Xue    </method>
9346*dc5640d1SHerbert Xue    <method name="applyTo"
9347*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9348*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9349*dc5640d1SHerbert Xue      deprecated="not deprecated">
9350*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9351*dc5640d1SHerbert Xue    </method>
9352*dc5640d1SHerbert Xue    <doc>
9353*dc5640d1SHerbert Xue    <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
9354*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
9355*dc5640d1SHerbert Xue requestInjection()} statements:
9356*dc5640d1SHerbert Xue <pre>
9357*dc5640d1SHerbert Xue     requestInjection(serviceInstance);</pre>
9358*dc5640d1SHerbert Xue
9359*dc5640d1SHerbert Xue @author [email protected] (Mike Ward)
9360*dc5640d1SHerbert Xue @since 2.0]]>
9361*dc5640d1SHerbert Xue    </doc>
9362*dc5640d1SHerbert Xue  </class>
9363*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InjectionRequest -->
9364*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.InstanceBinding -->
9365*dc5640d1SHerbert Xue  <interface name="InstanceBinding"    abstract="true"
9366*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9367*dc5640d1SHerbert Xue    deprecated="not deprecated">
9368*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9369*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9370*dc5640d1SHerbert Xue    <method name="getInstance" return="T"
9371*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9373*dc5640d1SHerbert Xue      deprecated="not deprecated">
9374*dc5640d1SHerbert Xue      <doc>
9375*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied instance.]]>
9376*dc5640d1SHerbert Xue      </doc>
9377*dc5640d1SHerbert Xue    </method>
9378*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9379*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9380*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9381*dc5640d1SHerbert Xue      deprecated="not deprecated">
9382*dc5640d1SHerbert Xue      <doc>
9383*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
9384*dc5640d1SHerbert Xue time only.
9385*dc5640d1SHerbert Xue
9386*dc5640d1SHerbert Xue @return a possibly empty set]]>
9387*dc5640d1SHerbert Xue      </doc>
9388*dc5640d1SHerbert Xue    </method>
9389*dc5640d1SHerbert Xue    <doc>
9390*dc5640d1SHerbert Xue    <![CDATA[A binding to a single instance. The same instance is returned for every injection.
9391*dc5640d1SHerbert Xue
9392*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9393*dc5640d1SHerbert Xue @since 2.0]]>
9394*dc5640d1SHerbert Xue    </doc>
9395*dc5640d1SHerbert Xue  </interface>
9396*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.InstanceBinding -->
9397*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.InterceptorBinding -->
9398*dc5640d1SHerbert Xue  <class name="InterceptorBinding" extends="java.lang.Object"
9399*dc5640d1SHerbert Xue    abstract="false"
9400*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9401*dc5640d1SHerbert Xue    deprecated="not deprecated">
9402*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9403*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9404*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9405*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9406*dc5640d1SHerbert Xue      deprecated="not deprecated">
9407*dc5640d1SHerbert Xue    </method>
9408*dc5640d1SHerbert Xue    <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
9409*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9410*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9411*dc5640d1SHerbert Xue      deprecated="not deprecated">
9412*dc5640d1SHerbert Xue    </method>
9413*dc5640d1SHerbert Xue    <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
9414*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9415*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9416*dc5640d1SHerbert Xue      deprecated="not deprecated">
9417*dc5640d1SHerbert Xue    </method>
9418*dc5640d1SHerbert Xue    <method name="getInterceptors" return="java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;"
9419*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9420*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9421*dc5640d1SHerbert Xue      deprecated="not deprecated">
9422*dc5640d1SHerbert Xue    </method>
9423*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9424*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9425*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9426*dc5640d1SHerbert Xue      deprecated="not deprecated">
9427*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9428*dc5640d1SHerbert Xue    </method>
9429*dc5640d1SHerbert Xue    <method name="applyTo"
9430*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9431*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9432*dc5640d1SHerbert Xue      deprecated="not deprecated">
9433*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9434*dc5640d1SHerbert Xue    </method>
9435*dc5640d1SHerbert Xue    <doc>
9436*dc5640d1SHerbert Xue    <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
9437*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
9438*dc5640d1SHerbert Xue Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
9439*dc5640d1SHerbert Xue <pre>
9440*dc5640d1SHerbert Xue     bindInterceptor(Matchers.subclassesOf(MyAction.class),
9441*dc5640d1SHerbert Xue         Matchers.annotatedWith(Transactional.class),
9442*dc5640d1SHerbert Xue         new MyTransactionInterceptor());</pre>
9443*dc5640d1SHerbert Xue
9444*dc5640d1SHerbert Xue or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
9445*dc5640d1SHerbert Xue org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
9446*dc5640d1SHerbert Xue
9447*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9448*dc5640d1SHerbert Xue @since 2.0]]>
9449*dc5640d1SHerbert Xue    </doc>
9450*dc5640d1SHerbert Xue  </class>
9451*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.InterceptorBinding -->
9452*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
9453*dc5640d1SHerbert Xue  <interface name="LinkedKeyBinding"    abstract="true"
9454*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9455*dc5640d1SHerbert Xue    deprecated="not deprecated">
9456*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9457*dc5640d1SHerbert Xue    <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
9458*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9459*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9460*dc5640d1SHerbert Xue      deprecated="not deprecated">
9461*dc5640d1SHerbert Xue      <doc>
9462*dc5640d1SHerbert Xue      <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
9463*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
9464*dc5640d1SHerbert Xue      </doc>
9465*dc5640d1SHerbert Xue    </method>
9466*dc5640d1SHerbert Xue    <doc>
9467*dc5640d1SHerbert Xue    <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
9468*dc5640d1SHerbert Xue
9469*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9470*dc5640d1SHerbert Xue @since 2.0]]>
9471*dc5640d1SHerbert Xue    </doc>
9472*dc5640d1SHerbert Xue  </interface>
9473*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
9474*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.MembersInjectorLookup -->
9475*dc5640d1SHerbert Xue  <class name="MembersInjectorLookup" extends="java.lang.Object"
9476*dc5640d1SHerbert Xue    abstract="false"
9477*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9478*dc5640d1SHerbert Xue    deprecated="not deprecated">
9479*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9480*dc5640d1SHerbert Xue    <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
9481*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9482*dc5640d1SHerbert Xue      deprecated="not deprecated">
9483*dc5640d1SHerbert Xue    </constructor>
9484*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9485*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9486*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9487*dc5640d1SHerbert Xue      deprecated="not deprecated">
9488*dc5640d1SHerbert Xue    </method>
9489*dc5640d1SHerbert Xue    <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
9490*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9491*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9492*dc5640d1SHerbert Xue      deprecated="not deprecated">
9493*dc5640d1SHerbert Xue      <doc>
9494*dc5640d1SHerbert Xue      <![CDATA[Gets the type containing the members to be injected.]]>
9495*dc5640d1SHerbert Xue      </doc>
9496*dc5640d1SHerbert Xue    </method>
9497*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9498*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9499*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9500*dc5640d1SHerbert Xue      deprecated="not deprecated">
9501*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9502*dc5640d1SHerbert Xue    </method>
9503*dc5640d1SHerbert Xue    <method name="initializeDelegate"
9504*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9505*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9506*dc5640d1SHerbert Xue      deprecated="not deprecated">
9507*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
9508*dc5640d1SHerbert Xue      <doc>
9509*dc5640d1SHerbert Xue      <![CDATA[Sets the actual members injector.
9510*dc5640d1SHerbert Xue
9511*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
9512*dc5640d1SHerbert Xue      </doc>
9513*dc5640d1SHerbert Xue    </method>
9514*dc5640d1SHerbert Xue    <method name="applyTo"
9515*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9516*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9517*dc5640d1SHerbert Xue      deprecated="not deprecated">
9518*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9519*dc5640d1SHerbert Xue    </method>
9520*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
9521*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9522*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9523*dc5640d1SHerbert Xue      deprecated="not deprecated">
9524*dc5640d1SHerbert Xue      <doc>
9525*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
9526*dc5640d1SHerbert Xue The delegate will be initialized when this element is processed, or otherwise used to create
9527*dc5640d1SHerbert Xue an injector.]]>
9528*dc5640d1SHerbert Xue      </doc>
9529*dc5640d1SHerbert Xue    </method>
9530*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
9531*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9532*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9533*dc5640d1SHerbert Xue      deprecated="not deprecated">
9534*dc5640d1SHerbert Xue      <doc>
9535*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
9536*dc5640d1SHerbert Xue initialized, which usually happens when the injector is created. The members injector will
9537*dc5640d1SHerbert Xue throw an {@code IllegalStateException} if you try to use it beforehand.]]>
9538*dc5640d1SHerbert Xue      </doc>
9539*dc5640d1SHerbert Xue    </method>
9540*dc5640d1SHerbert Xue    <doc>
9541*dc5640d1SHerbert Xue    <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
9542*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
9543*dc5640d1SHerbert Xue <pre>
9544*dc5640d1SHerbert Xue     MembersInjector&lt;PaymentService&gt; membersInjector
9545*dc5640d1SHerbert Xue         = getMembersInjector(PaymentService.class);</pre>
9546*dc5640d1SHerbert Xue
9547*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
9548*dc5640d1SHerbert Xue @since 2.0]]>
9549*dc5640d1SHerbert Xue    </doc>
9550*dc5640d1SHerbert Xue  </class>
9551*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.MembersInjectorLookup -->
9552*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Message -->
9553*dc5640d1SHerbert Xue  <class name="Message" extends="java.lang.Object"
9554*dc5640d1SHerbert Xue    abstract="false"
9555*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9556*dc5640d1SHerbert Xue    deprecated="not deprecated">
9557*dc5640d1SHerbert Xue    <implements name="java.io.Serializable"/>
9558*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9559*dc5640d1SHerbert Xue    <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
9560*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9561*dc5640d1SHerbert Xue      deprecated="not deprecated">
9562*dc5640d1SHerbert Xue      <doc>
9563*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9564*dc5640d1SHerbert Xue      </doc>
9565*dc5640d1SHerbert Xue    </constructor>
9566*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.String, java.lang.Throwable"
9567*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9568*dc5640d1SHerbert Xue      deprecated="not deprecated">
9569*dc5640d1SHerbert Xue      <doc>
9570*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
9571*dc5640d1SHerbert Xue      </doc>
9572*dc5640d1SHerbert Xue    </constructor>
9573*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.Object, java.lang.String"
9574*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9575*dc5640d1SHerbert Xue      deprecated="not deprecated">
9576*dc5640d1SHerbert Xue    </constructor>
9577*dc5640d1SHerbert Xue    <constructor name="Message" type="java.lang.String"
9578*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9579*dc5640d1SHerbert Xue      deprecated="not deprecated">
9580*dc5640d1SHerbert Xue    </constructor>
9581*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
9582*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9583*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9584*dc5640d1SHerbert Xue      deprecated="not deprecated">
9585*dc5640d1SHerbert Xue    </method>
9586*dc5640d1SHerbert Xue    <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
9587*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9588*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9589*dc5640d1SHerbert Xue      deprecated="not deprecated">
9590*dc5640d1SHerbert Xue      <doc>
9591*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9592*dc5640d1SHerbert Xue      </doc>
9593*dc5640d1SHerbert Xue    </method>
9594*dc5640d1SHerbert Xue    <method name="getMessage" return="java.lang.String"
9595*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9596*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9597*dc5640d1SHerbert Xue      deprecated="not deprecated">
9598*dc5640d1SHerbert Xue      <doc>
9599*dc5640d1SHerbert Xue      <![CDATA[Gets the error message text.]]>
9600*dc5640d1SHerbert Xue      </doc>
9601*dc5640d1SHerbert Xue    </method>
9602*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9603*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9604*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9605*dc5640d1SHerbert Xue      deprecated="not deprecated">
9606*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9607*dc5640d1SHerbert Xue      <doc>
9608*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9609*dc5640d1SHerbert Xue      </doc>
9610*dc5640d1SHerbert Xue    </method>
9611*dc5640d1SHerbert Xue    <method name="getCause" return="java.lang.Throwable"
9612*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9613*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9614*dc5640d1SHerbert Xue      deprecated="not deprecated">
9615*dc5640d1SHerbert Xue      <doc>
9616*dc5640d1SHerbert Xue      <![CDATA[Returns the throwable that caused this message, or {@code null} if this
9617*dc5640d1SHerbert Xue message was not caused by a throwable.
9618*dc5640d1SHerbert Xue
9619*dc5640d1SHerbert Xue @since 2.0]]>
9620*dc5640d1SHerbert Xue      </doc>
9621*dc5640d1SHerbert Xue    </method>
9622*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
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    </method>
9627*dc5640d1SHerbert Xue    <method name="hashCode" return="int"
9628*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9629*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9630*dc5640d1SHerbert Xue      deprecated="not deprecated">
9631*dc5640d1SHerbert Xue    </method>
9632*dc5640d1SHerbert Xue    <method name="equals" return="boolean"
9633*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9634*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9635*dc5640d1SHerbert Xue      deprecated="not deprecated">
9636*dc5640d1SHerbert Xue      <param name="o" type="java.lang.Object"/>
9637*dc5640d1SHerbert Xue    </method>
9638*dc5640d1SHerbert Xue    <method name="applyTo"
9639*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9640*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9641*dc5640d1SHerbert Xue      deprecated="not deprecated">
9642*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9643*dc5640d1SHerbert Xue      <doc>
9644*dc5640d1SHerbert Xue      <![CDATA[@since 2.0]]>
9645*dc5640d1SHerbert Xue      </doc>
9646*dc5640d1SHerbert Xue    </method>
9647*dc5640d1SHerbert Xue    <doc>
9648*dc5640d1SHerbert Xue    <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
9649*dc5640d1SHerbert Xue Guice and its extensions. Messages can be created explicitly in a module using {@link
9650*dc5640d1SHerbert Xue com.google.inject.Binder#addError(Throwable) addError()} statements:
9651*dc5640d1SHerbert Xue <pre>
9652*dc5640d1SHerbert Xue     try {
9653*dc5640d1SHerbert Xue       bindPropertiesFromFile();
9654*dc5640d1SHerbert Xue     } catch (IOException e) {
9655*dc5640d1SHerbert Xue       addError(e);
9656*dc5640d1SHerbert Xue     }</pre>
9657*dc5640d1SHerbert Xue
9658*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
9659*dc5640d1SHerbert Xue    </doc>
9660*dc5640d1SHerbert Xue  </class>
9661*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Message -->
9662*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9663*dc5640d1SHerbert Xue  <class name="ModuleAnnotatedMethodScanner" extends="java.lang.Object"
9664*dc5640d1SHerbert Xue    abstract="true"
9665*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9666*dc5640d1SHerbert Xue    deprecated="not deprecated">
9667*dc5640d1SHerbert Xue    <constructor name="ModuleAnnotatedMethodScanner"
9668*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9669*dc5640d1SHerbert Xue      deprecated="not deprecated">
9670*dc5640d1SHerbert Xue    </constructor>
9671*dc5640d1SHerbert Xue    <method name="annotationClasses" return="java.util.Set&lt;? extends java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;&gt;"
9672*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9673*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9674*dc5640d1SHerbert Xue      deprecated="not deprecated">
9675*dc5640d1SHerbert Xue      <doc>
9676*dc5640d1SHerbert Xue      <![CDATA[Returns the annotations this should scan for. Every method in the module that has one of these
9677*dc5640d1SHerbert Xue annotations will create a Provider binding, with the return value of the binding being what's
9678*dc5640d1SHerbert Xue provided and the parameters of the method being dependencies of the provider.]]>
9679*dc5640d1SHerbert Xue      </doc>
9680*dc5640d1SHerbert Xue    </method>
9681*dc5640d1SHerbert Xue    <method name="prepareMethod" return="com.google.inject.Key&lt;T&gt;"
9682*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9683*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9684*dc5640d1SHerbert Xue      deprecated="not deprecated">
9685*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9686*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
9687*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
9688*dc5640d1SHerbert Xue      <param name="injectionPoint" type="com.google.inject.spi.InjectionPoint"/>
9689*dc5640d1SHerbert Xue      <doc>
9690*dc5640d1SHerbert Xue      <![CDATA[Prepares a method for binding. This {@code key} parameter is the key discovered from looking at
9691*dc5640d1SHerbert Xue the binding annotation and return value of the method. Implementations can modify the key to
9692*dc5640d1SHerbert Xue instead bind to another key. For example, Multibinder may want to change
9693*dc5640d1SHerbert Xue {@code @SetProvides String provideFoo()} to bind into a unique Key within the multibinder
9694*dc5640d1SHerbert Xue instead of binding {@code String}.
9695*dc5640d1SHerbert Xue
9696*dc5640d1SHerbert Xue <p>The injection point and annotation are provided in case the implementation wants to set the
9697*dc5640d1SHerbert Xue key based on the property of the annotation or if any additional preparation is needed for any
9698*dc5640d1SHerbert Xue of the dependencies. The annotation is guaranteed to be an instance of one the classes returned
9699*dc5640d1SHerbert Xue by {@link #annotationClasses}.]]>
9700*dc5640d1SHerbert Xue      </doc>
9701*dc5640d1SHerbert Xue    </method>
9702*dc5640d1SHerbert Xue    <doc>
9703*dc5640d1SHerbert Xue    <![CDATA[Allows extensions to scan modules for annotated methods and bind those methods
9704*dc5640d1SHerbert Xue as providers, similar to {@code @Provides} methods.
9705*dc5640d1SHerbert Xue
9706*dc5640d1SHerbert Xue @since 4.0]]>
9707*dc5640d1SHerbert Xue    </doc>
9708*dc5640d1SHerbert Xue  </class>
9709*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScanner -->
9710*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9711*dc5640d1SHerbert Xue  <class name="ModuleAnnotatedMethodScannerBinding" extends="java.lang.Object"
9712*dc5640d1SHerbert Xue    abstract="false"
9713*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9714*dc5640d1SHerbert Xue    deprecated="not deprecated">
9715*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9716*dc5640d1SHerbert Xue    <constructor name="ModuleAnnotatedMethodScannerBinding" type="java.lang.Object, com.google.inject.spi.ModuleAnnotatedMethodScanner"
9717*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9718*dc5640d1SHerbert Xue      deprecated="not deprecated">
9719*dc5640d1SHerbert Xue    </constructor>
9720*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9721*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9722*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9723*dc5640d1SHerbert Xue      deprecated="not deprecated">
9724*dc5640d1SHerbert Xue    </method>
9725*dc5640d1SHerbert Xue    <method name="getScanner" return="com.google.inject.spi.ModuleAnnotatedMethodScanner"
9726*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9727*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9728*dc5640d1SHerbert Xue      deprecated="not deprecated">
9729*dc5640d1SHerbert Xue    </method>
9730*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9731*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9732*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9733*dc5640d1SHerbert Xue      deprecated="not deprecated">
9734*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9735*dc5640d1SHerbert Xue    </method>
9736*dc5640d1SHerbert Xue    <method name="applyTo"
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      <param name="binder" type="com.google.inject.Binder"/>
9741*dc5640d1SHerbert Xue    </method>
9742*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
9743*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9744*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9745*dc5640d1SHerbert Xue      deprecated="not deprecated">
9746*dc5640d1SHerbert Xue    </method>
9747*dc5640d1SHerbert Xue    <doc>
9748*dc5640d1SHerbert Xue    <![CDATA[Represents a call to {@link Binder#scanModulesForAnnotatedMethods} in a module.
9749*dc5640d1SHerbert Xue
9750*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
9751*dc5640d1SHerbert Xue @since 4.0]]>
9752*dc5640d1SHerbert Xue    </doc>
9753*dc5640d1SHerbert Xue  </class>
9754*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ModuleAnnotatedMethodScannerBinding -->
9755*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.PrivateElements -->
9756*dc5640d1SHerbert Xue  <interface name="PrivateElements"    abstract="true"
9757*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9758*dc5640d1SHerbert Xue    deprecated="not deprecated">
9759*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9760*dc5640d1SHerbert Xue    <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
9761*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9762*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9763*dc5640d1SHerbert Xue      deprecated="not deprecated">
9764*dc5640d1SHerbert Xue      <doc>
9765*dc5640d1SHerbert Xue      <![CDATA[Returns the configuration information in this private environment.]]>
9766*dc5640d1SHerbert Xue      </doc>
9767*dc5640d1SHerbert Xue    </method>
9768*dc5640d1SHerbert Xue    <method name="getInjector" return="com.google.inject.Injector"
9769*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9770*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9771*dc5640d1SHerbert Xue      deprecated="not deprecated">
9772*dc5640d1SHerbert Xue      <doc>
9773*dc5640d1SHerbert Xue      <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
9774*dc5640d1SHerbert Xue been used to create an injector.]]>
9775*dc5640d1SHerbert Xue      </doc>
9776*dc5640d1SHerbert Xue    </method>
9777*dc5640d1SHerbert Xue    <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
9778*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9779*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9780*dc5640d1SHerbert Xue      deprecated="not deprecated">
9781*dc5640d1SHerbert Xue      <doc>
9782*dc5640d1SHerbert Xue      <![CDATA[Returns the unique exposed keys for these private elements.]]>
9783*dc5640d1SHerbert Xue      </doc>
9784*dc5640d1SHerbert Xue    </method>
9785*dc5640d1SHerbert Xue    <method name="getExposedSource" return="java.lang.Object"
9786*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9787*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9788*dc5640d1SHerbert Xue      deprecated="not deprecated">
9789*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
9790*dc5640d1SHerbert Xue      <doc>
9791*dc5640d1SHerbert Xue      <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
9792*dc5640d1SHerbert Xue exposed. Used by Guice in the production of descriptive error messages.
9793*dc5640d1SHerbert Xue
9794*dc5640d1SHerbert Xue <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
9795*dc5640d1SHerbert Xue example. Tools should simply call {@code toString()} on the source object if the type is
9796*dc5640d1SHerbert Xue unfamiliar.
9797*dc5640d1SHerbert Xue
9798*dc5640d1SHerbert Xue @param key one of the keys exposed by this module.]]>
9799*dc5640d1SHerbert Xue      </doc>
9800*dc5640d1SHerbert Xue    </method>
9801*dc5640d1SHerbert Xue    <doc>
9802*dc5640d1SHerbert Xue    <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
9803*dc5640d1SHerbert Xue default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
9804*dc5640d1SHerbert Xue
9805*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9806*dc5640d1SHerbert Xue @since 2.0]]>
9807*dc5640d1SHerbert Xue    </doc>
9808*dc5640d1SHerbert Xue  </interface>
9809*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.PrivateElements -->
9810*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderBinding -->
9811*dc5640d1SHerbert Xue  <interface name="ProviderBinding"    abstract="true"
9812*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9813*dc5640d1SHerbert Xue    deprecated="not deprecated">
9814*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9815*dc5640d1SHerbert Xue    <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
9816*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9817*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9818*dc5640d1SHerbert Xue      deprecated="not deprecated">
9819*dc5640d1SHerbert Xue      <doc>
9820*dc5640d1SHerbert Xue      <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
9821*dc5640d1SHerbert Xue can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
9822*dc5640d1SHerbert Xue Injector.getBinding(providedKey)}]]>
9823*dc5640d1SHerbert Xue      </doc>
9824*dc5640d1SHerbert Xue    </method>
9825*dc5640d1SHerbert Xue    <doc>
9826*dc5640d1SHerbert Xue    <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
9827*dc5640d1SHerbert Xue is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
9828*dc5640d1SHerbert Xue
9829*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9830*dc5640d1SHerbert Xue @since 2.0]]>
9831*dc5640d1SHerbert Xue    </doc>
9832*dc5640d1SHerbert Xue  </interface>
9833*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderBinding -->
9834*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
9835*dc5640d1SHerbert Xue  <interface name="ProviderInstanceBinding"    abstract="true"
9836*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9837*dc5640d1SHerbert Xue    deprecated="not deprecated">
9838*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
9839*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9840*dc5640d1SHerbert Xue    <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
9841*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9842*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9843*dc5640d1SHerbert Xue      deprecated="Use {@link #getUserSuppliedProvider} instead.">
9844*dc5640d1SHerbert Xue      <doc>
9845*dc5640d1SHerbert Xue      <![CDATA[If the user supplied a JSR330 binding, then this will wrap that one. To always return the
9846*dc5640d1SHerbert Xue user-supplied provider, use {@link #getUserSuppliedProvider}.
9847*dc5640d1SHerbert Xue
9848*dc5640d1SHerbert Xue @deprecated Use {@link #getUserSuppliedProvider} instead.]]>
9849*dc5640d1SHerbert Xue      </doc>
9850*dc5640d1SHerbert Xue    </method>
9851*dc5640d1SHerbert Xue    <method name="getUserSuppliedProvider" return="javax.inject.Provider&lt;? extends T&gt;"
9852*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9853*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9854*dc5640d1SHerbert Xue      deprecated="not deprecated">
9855*dc5640d1SHerbert Xue      <doc>
9856*dc5640d1SHerbert Xue      <![CDATA[Returns the user-supplied, unscoped provider.
9857*dc5640d1SHerbert Xue @since 4.0]]>
9858*dc5640d1SHerbert Xue      </doc>
9859*dc5640d1SHerbert Xue    </method>
9860*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
9861*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
9862*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9863*dc5640d1SHerbert Xue      deprecated="not deprecated">
9864*dc5640d1SHerbert Xue      <doc>
9865*dc5640d1SHerbert Xue      <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
9866*dc5640d1SHerbert Xue time only.
9867*dc5640d1SHerbert Xue
9868*dc5640d1SHerbert Xue @return a possibly empty set]]>
9869*dc5640d1SHerbert Xue      </doc>
9870*dc5640d1SHerbert Xue    </method>
9871*dc5640d1SHerbert Xue    <doc>
9872*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
9873*dc5640d1SHerbert Xue injections.
9874*dc5640d1SHerbert Xue
9875*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9876*dc5640d1SHerbert Xue @since 2.0]]>
9877*dc5640d1SHerbert Xue    </doc>
9878*dc5640d1SHerbert Xue  </interface>
9879*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
9880*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
9881*dc5640d1SHerbert Xue  <interface name="ProviderKeyBinding"    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.Binding&lt;T&gt;"/>
9885*dc5640d1SHerbert Xue    <method name="getProviderKey" return="com.google.inject.Key&lt;? extends javax.inject.Provider&lt;? extends T&gt;&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 key used to resolve the provider's binding. That binding can be retrieved from an
9891*dc5640d1SHerbert Xue injector using {@link com.google.inject.Injector#getBinding(Key)
9892*dc5640d1SHerbert Xue Injector.getBinding(providerKey)}]]>
9893*dc5640d1SHerbert Xue      </doc>
9894*dc5640d1SHerbert Xue    </method>
9895*dc5640d1SHerbert Xue    <doc>
9896*dc5640d1SHerbert Xue    <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
9897*dc5640d1SHerbert Xue provider's {@code get} method is invoked.
9898*dc5640d1SHerbert Xue
9899*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9900*dc5640d1SHerbert Xue @since 2.0]]>
9901*dc5640d1SHerbert Xue    </doc>
9902*dc5640d1SHerbert Xue  </interface>
9903*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
9904*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProviderLookup -->
9905*dc5640d1SHerbert Xue  <class name="ProviderLookup" extends="java.lang.Object"
9906*dc5640d1SHerbert Xue    abstract="false"
9907*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
9908*dc5640d1SHerbert Xue    deprecated="not deprecated">
9909*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
9910*dc5640d1SHerbert Xue    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
9911*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9912*dc5640d1SHerbert Xue      deprecated="not deprecated">
9913*dc5640d1SHerbert Xue    </constructor>
9914*dc5640d1SHerbert Xue    <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.spi.Dependency&lt;T&gt;"
9915*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9916*dc5640d1SHerbert Xue      deprecated="not deprecated">
9917*dc5640d1SHerbert Xue      <doc>
9918*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
9919*dc5640d1SHerbert Xue      </doc>
9920*dc5640d1SHerbert Xue    </constructor>
9921*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
9922*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9923*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9924*dc5640d1SHerbert Xue      deprecated="not deprecated">
9925*dc5640d1SHerbert Xue    </method>
9926*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
9927*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9928*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9929*dc5640d1SHerbert Xue      deprecated="not deprecated">
9930*dc5640d1SHerbert Xue    </method>
9931*dc5640d1SHerbert Xue    <method name="getDependency" return="com.google.inject.spi.Dependency&lt;T&gt;"
9932*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9933*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9934*dc5640d1SHerbert Xue      deprecated="not deprecated">
9935*dc5640d1SHerbert Xue      <doc>
9936*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
9937*dc5640d1SHerbert Xue      </doc>
9938*dc5640d1SHerbert Xue    </method>
9939*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
9940*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9941*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9942*dc5640d1SHerbert Xue      deprecated="not deprecated">
9943*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
9944*dc5640d1SHerbert Xue    </method>
9945*dc5640d1SHerbert Xue    <method name="initializeDelegate"
9946*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9947*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9948*dc5640d1SHerbert Xue      deprecated="not deprecated">
9949*dc5640d1SHerbert Xue      <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
9950*dc5640d1SHerbert Xue      <doc>
9951*dc5640d1SHerbert Xue      <![CDATA[Sets the actual provider.
9952*dc5640d1SHerbert Xue
9953*dc5640d1SHerbert Xue @throws IllegalStateException if the delegate is already set]]>
9954*dc5640d1SHerbert Xue      </doc>
9955*dc5640d1SHerbert Xue    </method>
9956*dc5640d1SHerbert Xue    <method name="applyTo"
9957*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9958*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9959*dc5640d1SHerbert Xue      deprecated="not deprecated">
9960*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
9961*dc5640d1SHerbert Xue    </method>
9962*dc5640d1SHerbert Xue    <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
9963*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9964*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9965*dc5640d1SHerbert Xue      deprecated="not deprecated">
9966*dc5640d1SHerbert Xue      <doc>
9967*dc5640d1SHerbert Xue      <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
9968*dc5640d1SHerbert Xue will be initialized when this element is processed, or otherwise used to create an injector.]]>
9969*dc5640d1SHerbert Xue      </doc>
9970*dc5640d1SHerbert Xue    </method>
9971*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
9972*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
9973*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
9974*dc5640d1SHerbert Xue      deprecated="not deprecated">
9975*dc5640d1SHerbert Xue      <doc>
9976*dc5640d1SHerbert Xue      <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
9977*dc5640d1SHerbert Xue which usually happens when the injector is created. The provider will throw an {@code
9978*dc5640d1SHerbert Xue IllegalStateException} if you try to use it beforehand.]]>
9979*dc5640d1SHerbert Xue      </doc>
9980*dc5640d1SHerbert Xue    </method>
9981*dc5640d1SHerbert Xue    <doc>
9982*dc5640d1SHerbert Xue    <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
9983*dc5640d1SHerbert Xue {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
9984*dc5640d1SHerbert Xue <pre>
9985*dc5640d1SHerbert Xue     Provider&lt;PaymentService&gt; paymentServiceProvider
9986*dc5640d1SHerbert Xue         = getProvider(PaymentService.class);</pre>
9987*dc5640d1SHerbert Xue
9988*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
9989*dc5640d1SHerbert Xue @since 2.0]]>
9990*dc5640d1SHerbert Xue    </doc>
9991*dc5640d1SHerbert Xue  </class>
9992*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProviderLookup -->
9993*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
9994*dc5640d1SHerbert Xue  <interface name="ProviderWithDependencies"    abstract="true"
9995*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
9996*dc5640d1SHerbert Xue    deprecated="not deprecated">
9997*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
9998*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
9999*dc5640d1SHerbert Xue    <doc>
10000*dc5640d1SHerbert Xue    <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
10001*dc5640d1SHerbert Xue aren't specified in injections, this interface should be used to expose all dependencies.
10002*dc5640d1SHerbert Xue
10003*dc5640d1SHerbert Xue @since 2.0]]>
10004*dc5640d1SHerbert Xue    </doc>
10005*dc5640d1SHerbert Xue  </interface>
10006*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
10007*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10008*dc5640d1SHerbert Xue  <interface name="ProviderWithExtensionVisitor"    abstract="true"
10009*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10010*dc5640d1SHerbert Xue    deprecated="not deprecated">
10011*dc5640d1SHerbert Xue    <implements name="com.google.inject.Provider&lt;T&gt;"/>
10012*dc5640d1SHerbert Xue    <method name="acceptExtensionVisitor" return="V"
10013*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10014*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10015*dc5640d1SHerbert Xue      deprecated="not deprecated">
10016*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;B, V&gt;"/>
10017*dc5640d1SHerbert Xue      <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends B&gt;"/>
10018*dc5640d1SHerbert Xue      <doc>
10019*dc5640d1SHerbert Xue      <![CDATA[Instructs the extension determine if the visitor is an instance of a custom
10020*dc5640d1SHerbert Xue extension visitor, and if so, visit it using that method. If the visitor is
10021*dc5640d1SHerbert Xue not an instance of the custom extension visitor, this method <b>MUST</b>
10022*dc5640d1SHerbert Xue call visitor.visit(binding).
10023*dc5640d1SHerbert Xue <p>
10024*dc5640d1SHerbert Xue Due to issues with generics, the type parameters of this method do not
10025*dc5640d1SHerbert Xue relate to the type of the provider. In practice, the 'B' type will always
10026*dc5640d1SHerbert Xue be a supertype of 'T'.]]>
10027*dc5640d1SHerbert Xue      </doc>
10028*dc5640d1SHerbert Xue    </method>
10029*dc5640d1SHerbert Xue    <doc>
10030*dc5640d1SHerbert Xue    <![CDATA[A Provider that is part of an extension which supports a custom
10031*dc5640d1SHerbert Xue BindingTargetVisitor.
10032*dc5640d1SHerbert Xue <p>
10033*dc5640d1SHerbert Xue When an extension binds a provider instance, the provider can implement this
10034*dc5640d1SHerbert Xue interface to allow users using the
10035*dc5640d1SHerbert Xue {@link Binding#acceptTargetVisitor(BindingTargetVisitor)} method to visit a
10036*dc5640d1SHerbert Xue custom visitor designed for that extension. A typical implementation within
10037*dc5640d1SHerbert Xue the extension would look like
10038*dc5640d1SHerbert Xue <pre>
10039*dc5640d1SHerbert Xue &lt;V, B> V acceptExtensionVisitor(BindingTargetVisitor&lt;B, V> visitor, ProviderInstanceBinding&lt;? extends B> binding) {
10040*dc5640d1SHerbert Xue   if(visitor instanceof MyCustomExtensionVisitor) {
10041*dc5640d1SHerbert Xue     return ((MyCustomExtensionVisitor&lt;B, V>)visitor).visitCustomExtension(customProperties, binding);
10042*dc5640d1SHerbert Xue   } else {
10043*dc5640d1SHerbert Xue     return visitor.visit(binding);
10044*dc5640d1SHerbert Xue   }
10045*dc5640d1SHerbert Xue }</pre>
10046*dc5640d1SHerbert Xue 'MyCustomExtensionVisitor' in the example above would be an interface the
10047*dc5640d1SHerbert Xue extension provides that users can implement in order to be notified of custom
10048*dc5640d1SHerbert Xue extension information. These visitor interfaces must extend from
10049*dc5640d1SHerbert Xue BindingTargetVisitor.
10050*dc5640d1SHerbert Xue
10051*dc5640d1SHerbert Xue @since 3.0
10052*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10053*dc5640d1SHerbert Xue    </doc>
10054*dc5640d1SHerbert Xue  </interface>
10055*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProviderWithExtensionVisitor -->
10056*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvidesMethodBinding -->
10057*dc5640d1SHerbert Xue  <interface name="ProvidesMethodBinding"    abstract="true"
10058*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10059*dc5640d1SHerbert Xue    deprecated="not deprecated">
10060*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.HasDependencies"/>
10061*dc5640d1SHerbert Xue    <method name="getMethod" return="java.lang.reflect.Method"
10062*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10063*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10064*dc5640d1SHerbert Xue      deprecated="not deprecated">
10065*dc5640d1SHerbert Xue      <doc>
10066*dc5640d1SHerbert Xue      <![CDATA[Returns the method this binding uses.]]>
10067*dc5640d1SHerbert Xue      </doc>
10068*dc5640d1SHerbert Xue    </method>
10069*dc5640d1SHerbert Xue    <method name="getEnclosingInstance" return="java.lang.Object"
10070*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10071*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10072*dc5640d1SHerbert Xue      deprecated="not deprecated">
10073*dc5640d1SHerbert Xue      <doc>
10074*dc5640d1SHerbert Xue      <![CDATA[Returns the instance of the object the method is defined in.]]>
10075*dc5640d1SHerbert Xue      </doc>
10076*dc5640d1SHerbert Xue    </method>
10077*dc5640d1SHerbert Xue    <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
10078*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10079*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10080*dc5640d1SHerbert Xue      deprecated="not deprecated">
10081*dc5640d1SHerbert Xue      <doc>
10082*dc5640d1SHerbert Xue      <![CDATA[Returns the key of the binding.]]>
10083*dc5640d1SHerbert Xue      </doc>
10084*dc5640d1SHerbert Xue    </method>
10085*dc5640d1SHerbert Xue    <method name="getAnnotation" return="java.lang.annotation.Annotation"
10086*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10087*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10088*dc5640d1SHerbert Xue      deprecated="not deprecated">
10089*dc5640d1SHerbert Xue      <doc>
10090*dc5640d1SHerbert Xue      <![CDATA[Returns the annotation that caused this binding to be created. For {@code @Provides} methods,
10091*dc5640d1SHerbert Xue this is an instance of the {@code @Provides} annotation. For bindings from
10092*dc5640d1SHerbert Xue {@link ModuleAnnotatedMethodScanner}, this is the annotation that caused the scanner to produce
10093*dc5640d1SHerbert Xue the binding.]]>
10094*dc5640d1SHerbert Xue      </doc>
10095*dc5640d1SHerbert Xue    </method>
10096*dc5640d1SHerbert Xue    <doc>
10097*dc5640d1SHerbert Xue    <![CDATA[An {@literal @}{@link Provides} binding or binding produced by a
10098*dc5640d1SHerbert Xue {@link ModuleAnnotatedMethodScanner}.
10099*dc5640d1SHerbert Xue
10100*dc5640d1SHerbert Xue @since 4.0
10101*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10102*dc5640d1SHerbert Xue    </doc>
10103*dc5640d1SHerbert Xue  </interface>
10104*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvidesMethodBinding -->
10105*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10106*dc5640d1SHerbert Xue  <interface name="ProvidesMethodTargetVisitor"    abstract="true"
10107*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10108*dc5640d1SHerbert Xue    deprecated="not deprecated">
10109*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
10110*dc5640d1SHerbert Xue    <method name="visit" return="V"
10111*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10112*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10113*dc5640d1SHerbert Xue      deprecated="not deprecated">
10114*dc5640d1SHerbert Xue      <param name="providesMethodBinding" type="com.google.inject.spi.ProvidesMethodBinding&lt;? extends T&gt;"/>
10115*dc5640d1SHerbert Xue      <doc>
10116*dc5640d1SHerbert Xue      <![CDATA[Visits an {@link ProvidesMethodBinding} created with an {@literal @}{@link Provides} method.]]>
10117*dc5640d1SHerbert Xue      </doc>
10118*dc5640d1SHerbert Xue    </method>
10119*dc5640d1SHerbert Xue    <doc>
10120*dc5640d1SHerbert Xue    <![CDATA[A visitor for the {@literal @}{@link Provides} bindings.
10121*dc5640d1SHerbert Xue <p>
10122*dc5640d1SHerbert Xue If your {@link BindingTargetVisitor} implements this interface, bindings created by using
10123*dc5640d1SHerbert Xue {@code @Provides} will be visited through this interface.
10124*dc5640d1SHerbert Xue
10125*dc5640d1SHerbert Xue @since 4.0
10126*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
10127*dc5640d1SHerbert Xue    </doc>
10128*dc5640d1SHerbert Xue  </interface>
10129*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvidesMethodTargetVisitor -->
10130*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.ProvisionListener -->
10131*dc5640d1SHerbert Xue  <interface name="ProvisionListener"    abstract="true"
10132*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10133*dc5640d1SHerbert Xue    deprecated="not deprecated">
10134*dc5640d1SHerbert Xue    <method name="onProvision"
10135*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10136*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10137*dc5640d1SHerbert Xue      deprecated="not deprecated">
10138*dc5640d1SHerbert Xue      <param name="provision" type="com.google.inject.spi.ProvisionListener.ProvisionInvocation&lt;T&gt;"/>
10139*dc5640d1SHerbert Xue      <doc>
10140*dc5640d1SHerbert Xue      <![CDATA[Invoked by Guice when an object requires provisioning. Provisioning occurs
10141*dc5640d1SHerbert Xue when Guice locates and injects the dependencies for a binding. For types
10142*dc5640d1SHerbert Xue bound to a Provider, provisioning encapsulates the {@link Provider#get}
10143*dc5640d1SHerbert Xue method. For toInstance or constant bindings, provisioning encapsulates
10144*dc5640d1SHerbert Xue the injecting of {@literal @}{@code Inject}ed fields or methods.
10145*dc5640d1SHerbert Xue For other types, provisioning encapsulates the construction of the
10146*dc5640d1SHerbert Xue object. If a type is bound within a {@link Scope}, provisioning depends on
10147*dc5640d1SHerbert Xue the scope. Types bound in Singleton scope will only be provisioned once.
10148*dc5640d1SHerbert Xue Types bound in no scope will be provisioned every time they are injected.
10149*dc5640d1SHerbert Xue Other scopes define their own behavior for provisioning.
10150*dc5640d1SHerbert Xue <p>
10151*dc5640d1SHerbert Xue To perform the provision, call {@link ProvisionInvocation#provision()}.
10152*dc5640d1SHerbert Xue If you do not explicitly call provision, it will be automatically done after
10153*dc5640d1SHerbert Xue this method returns.  It is an error to call provision more than once.]]>
10154*dc5640d1SHerbert Xue      </doc>
10155*dc5640d1SHerbert Xue    </method>
10156*dc5640d1SHerbert Xue    <doc>
10157*dc5640d1SHerbert Xue    <![CDATA[Listens for provisioning of objects. Useful for gathering timing information
10158*dc5640d1SHerbert Xue about provisioning, post-provision initialization, and more.
10159*dc5640d1SHerbert Xue
10160*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10161*dc5640d1SHerbert Xue @since 4.0]]>
10162*dc5640d1SHerbert Xue    </doc>
10163*dc5640d1SHerbert Xue  </interface>
10164*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.ProvisionListener -->
10165*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10166*dc5640d1SHerbert Xue  <class name="ProvisionListener.ProvisionInvocation" extends="java.lang.Object"
10167*dc5640d1SHerbert Xue    abstract="true"
10168*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
10169*dc5640d1SHerbert Xue    deprecated="not deprecated">
10170*dc5640d1SHerbert Xue    <constructor name="ProvisionInvocation"
10171*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10172*dc5640d1SHerbert Xue      deprecated="not deprecated">
10173*dc5640d1SHerbert Xue    </constructor>
10174*dc5640d1SHerbert Xue    <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
10175*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10176*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10177*dc5640d1SHerbert Xue      deprecated="not deprecated">
10178*dc5640d1SHerbert Xue      <doc>
10179*dc5640d1SHerbert Xue      <![CDATA[Returns the Binding this is provisioning.
10180*dc5640d1SHerbert Xue <p>
10181*dc5640d1SHerbert Xue You must not call {@link Provider#get()} on the provider returned by
10182*dc5640d1SHerbert Xue {@link Binding#getProvider}, otherwise you will get confusing error messages.]]>
10183*dc5640d1SHerbert Xue      </doc>
10184*dc5640d1SHerbert Xue    </method>
10185*dc5640d1SHerbert Xue    <method name="provision" return="T"
10186*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10187*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10188*dc5640d1SHerbert Xue      deprecated="not deprecated">
10189*dc5640d1SHerbert Xue      <doc>
10190*dc5640d1SHerbert Xue      <![CDATA[Performs the provision, returning the object provisioned.]]>
10191*dc5640d1SHerbert Xue      </doc>
10192*dc5640d1SHerbert Xue    </method>
10193*dc5640d1SHerbert Xue    <method name="getDependencyChain" return="java.util.List&lt;com.google.inject.spi.DependencyAndSource&gt;"
10194*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10195*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10196*dc5640d1SHerbert Xue      deprecated="not deprecated">
10197*dc5640d1SHerbert Xue      <doc>
10198*dc5640d1SHerbert Xue      <![CDATA[Returns the dependency chain that led to this object being provisioned.]]>
10199*dc5640d1SHerbert Xue      </doc>
10200*dc5640d1SHerbert Xue    </method>
10201*dc5640d1SHerbert Xue    <doc>
10202*dc5640d1SHerbert Xue    <![CDATA[Encapsulates a single act of provisioning.
10203*dc5640d1SHerbert Xue
10204*dc5640d1SHerbert Xue @since 4.0]]>
10205*dc5640d1SHerbert Xue    </doc>
10206*dc5640d1SHerbert Xue  </class>
10207*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProvisionListener.ProvisionInvocation -->
10208*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ProvisionListenerBinding -->
10209*dc5640d1SHerbert Xue  <class name="ProvisionListenerBinding" extends="java.lang.Object"
10210*dc5640d1SHerbert Xue    abstract="false"
10211*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10212*dc5640d1SHerbert Xue    deprecated="not deprecated">
10213*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10214*dc5640d1SHerbert Xue    <method name="getListeners" return="java.util.List&lt;com.google.inject.spi.ProvisionListener&gt;"
10215*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10216*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10217*dc5640d1SHerbert Xue      deprecated="not deprecated">
10218*dc5640d1SHerbert Xue      <doc>
10219*dc5640d1SHerbert Xue      <![CDATA[Returns the registered listeners.]]>
10220*dc5640d1SHerbert Xue      </doc>
10221*dc5640d1SHerbert Xue    </method>
10222*dc5640d1SHerbert Xue    <method name="getBindingMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.Binding&lt;?&gt;&gt;"
10223*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10224*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10225*dc5640d1SHerbert Xue      deprecated="not deprecated">
10226*dc5640d1SHerbert Xue      <doc>
10227*dc5640d1SHerbert Xue      <![CDATA[Returns the binding matcher which chooses which bindings the listener should be notified of.]]>
10228*dc5640d1SHerbert Xue      </doc>
10229*dc5640d1SHerbert Xue    </method>
10230*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10231*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10232*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10233*dc5640d1SHerbert Xue      deprecated="not deprecated">
10234*dc5640d1SHerbert Xue    </method>
10235*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="R"
10236*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10237*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10238*dc5640d1SHerbert Xue      deprecated="not deprecated">
10239*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
10240*dc5640d1SHerbert Xue    </method>
10241*dc5640d1SHerbert Xue    <method name="applyTo"
10242*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10243*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10244*dc5640d1SHerbert Xue      deprecated="not deprecated">
10245*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10246*dc5640d1SHerbert Xue    </method>
10247*dc5640d1SHerbert Xue    <doc>
10248*dc5640d1SHerbert Xue    <![CDATA[Binds keys (picked using a Matcher) to a provision listener. Listeners are created explicitly in
10249*dc5640d1SHerbert Xue a module using {@link Binder#bindListener(Matcher, ProvisionListener...)} statements:
10250*dc5640d1SHerbert Xue
10251*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10252*dc5640d1SHerbert Xue @since 4.0]]>
10253*dc5640d1SHerbert Xue    </doc>
10254*dc5640d1SHerbert Xue  </class>
10255*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ProvisionListenerBinding -->
10256*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10257*dc5640d1SHerbert Xue  <class name="RequireAtInjectOnConstructorsOption" extends="java.lang.Object"
10258*dc5640d1SHerbert Xue    abstract="false"
10259*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10260*dc5640d1SHerbert Xue    deprecated="not deprecated">
10261*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10262*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10263*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10264*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10265*dc5640d1SHerbert Xue      deprecated="not deprecated">
10266*dc5640d1SHerbert Xue    </method>
10267*dc5640d1SHerbert Xue    <method name="applyTo"
10268*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10269*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10270*dc5640d1SHerbert Xue      deprecated="not deprecated">
10271*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10272*dc5640d1SHerbert Xue    </method>
10273*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10274*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10275*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10276*dc5640d1SHerbert Xue      deprecated="not deprecated">
10277*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10278*dc5640d1SHerbert Xue    </method>
10279*dc5640d1SHerbert Xue    <doc>
10280*dc5640d1SHerbert Xue    <![CDATA[A request to require explicit {@literal @}{@link Inject} annotations on constructors.
10281*dc5640d1SHerbert Xue
10282*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10283*dc5640d1SHerbert Xue @since 4.0]]>
10284*dc5640d1SHerbert Xue    </doc>
10285*dc5640d1SHerbert Xue  </class>
10286*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireAtInjectOnConstructorsOption -->
10287*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10288*dc5640d1SHerbert Xue  <class name="RequireExactBindingAnnotationsOption" extends="java.lang.Object"
10289*dc5640d1SHerbert Xue    abstract="false"
10290*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10291*dc5640d1SHerbert Xue    deprecated="not deprecated">
10292*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10293*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10294*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10295*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10296*dc5640d1SHerbert Xue      deprecated="not deprecated">
10297*dc5640d1SHerbert Xue    </method>
10298*dc5640d1SHerbert Xue    <method name="applyTo"
10299*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10300*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10301*dc5640d1SHerbert Xue      deprecated="not deprecated">
10302*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10303*dc5640d1SHerbert Xue    </method>
10304*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10305*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10306*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10307*dc5640d1SHerbert Xue      deprecated="not deprecated">
10308*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10309*dc5640d1SHerbert Xue    </method>
10310*dc5640d1SHerbert Xue    <doc>
10311*dc5640d1SHerbert Xue    <![CDATA[A request to require exact binding annotations.
10312*dc5640d1SHerbert Xue
10313*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10314*dc5640d1SHerbert Xue @since 4.0]]>
10315*dc5640d1SHerbert Xue    </doc>
10316*dc5640d1SHerbert Xue  </class>
10317*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireExactBindingAnnotationsOption -->
10318*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.RequireExplicitBindingsOption -->
10319*dc5640d1SHerbert Xue  <class name="RequireExplicitBindingsOption" extends="java.lang.Object"
10320*dc5640d1SHerbert Xue    abstract="false"
10321*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10322*dc5640d1SHerbert Xue    deprecated="not deprecated">
10323*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10324*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10325*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10326*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10327*dc5640d1SHerbert Xue      deprecated="not deprecated">
10328*dc5640d1SHerbert Xue    </method>
10329*dc5640d1SHerbert Xue    <method name="applyTo"
10330*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10331*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10332*dc5640d1SHerbert Xue      deprecated="not deprecated">
10333*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10334*dc5640d1SHerbert Xue    </method>
10335*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10336*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10337*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10338*dc5640d1SHerbert Xue      deprecated="not deprecated">
10339*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10340*dc5640d1SHerbert Xue    </method>
10341*dc5640d1SHerbert Xue    <doc>
10342*dc5640d1SHerbert Xue    <![CDATA[A request to require explicit bindings.
10343*dc5640d1SHerbert Xue
10344*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10345*dc5640d1SHerbert Xue @since 3.0]]>
10346*dc5640d1SHerbert Xue    </doc>
10347*dc5640d1SHerbert Xue  </class>
10348*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.RequireExplicitBindingsOption -->
10349*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.ScopeBinding -->
10350*dc5640d1SHerbert Xue  <class name="ScopeBinding" extends="java.lang.Object"
10351*dc5640d1SHerbert Xue    abstract="false"
10352*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10353*dc5640d1SHerbert Xue    deprecated="not deprecated">
10354*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
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="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
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    </method>
10365*dc5640d1SHerbert Xue    <method name="getScope" return="com.google.inject.Scope"
10366*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10367*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10368*dc5640d1SHerbert Xue      deprecated="not deprecated">
10369*dc5640d1SHerbert Xue    </method>
10370*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10371*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10372*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10373*dc5640d1SHerbert Xue      deprecated="not deprecated">
10374*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10375*dc5640d1SHerbert Xue    </method>
10376*dc5640d1SHerbert Xue    <method name="applyTo"
10377*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10378*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10379*dc5640d1SHerbert Xue      deprecated="not deprecated">
10380*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10381*dc5640d1SHerbert Xue    </method>
10382*dc5640d1SHerbert Xue    <doc>
10383*dc5640d1SHerbert Xue    <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
10384*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
10385*dc5640d1SHerbert Xue statements:
10386*dc5640d1SHerbert Xue <pre>
10387*dc5640d1SHerbert Xue     Scope recordScope = new RecordScope();
10388*dc5640d1SHerbert Xue     bindScope(RecordScoped.class, new RecordScope());</pre>
10389*dc5640d1SHerbert Xue
10390*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10391*dc5640d1SHerbert Xue @since 2.0]]>
10392*dc5640d1SHerbert Xue    </doc>
10393*dc5640d1SHerbert Xue  </class>
10394*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.ScopeBinding -->
10395*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.StaticInjectionRequest -->
10396*dc5640d1SHerbert Xue  <class name="StaticInjectionRequest" extends="java.lang.Object"
10397*dc5640d1SHerbert Xue    abstract="false"
10398*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10399*dc5640d1SHerbert Xue    deprecated="not deprecated">
10400*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10401*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10402*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10403*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10404*dc5640d1SHerbert Xue      deprecated="not deprecated">
10405*dc5640d1SHerbert Xue    </method>
10406*dc5640d1SHerbert Xue    <method name="getType" return="java.lang.Class&lt;?&gt;"
10407*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10408*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10409*dc5640d1SHerbert Xue      deprecated="not deprecated">
10410*dc5640d1SHerbert Xue    </method>
10411*dc5640d1SHerbert Xue    <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
10412*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10413*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10414*dc5640d1SHerbert Xue      deprecated="not deprecated">
10415*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
10416*dc5640d1SHerbert Xue      <doc>
10417*dc5640d1SHerbert Xue      <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
10418*dc5640d1SHerbert Xue request.
10419*dc5640d1SHerbert Xue
10420*dc5640d1SHerbert Xue @return a possibly empty set of injection points. The set has a specified iteration order. All
10421*dc5640d1SHerbert Xue      fields are returned and then all methods. Within the fields, supertype fields are returned
10422*dc5640d1SHerbert Xue      before subtype fields. Similarly, supertype methods are returned before subtype methods.
10423*dc5640d1SHerbert Xue @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
10424*dc5640d1SHerbert Xue      a field with multiple binding annotations. The exception's {@link
10425*dc5640d1SHerbert Xue      ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
10426*dc5640d1SHerbert Xue      of the valid injection points.]]>
10427*dc5640d1SHerbert Xue      </doc>
10428*dc5640d1SHerbert Xue    </method>
10429*dc5640d1SHerbert Xue    <method name="applyTo"
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="binder" type="com.google.inject.Binder"/>
10434*dc5640d1SHerbert Xue    </method>
10435*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10436*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10437*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10438*dc5640d1SHerbert Xue      deprecated="not deprecated">
10439*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10440*dc5640d1SHerbert Xue    </method>
10441*dc5640d1SHerbert Xue    <doc>
10442*dc5640d1SHerbert Xue    <![CDATA[A request to inject the static fields and methods of a type. Requests are created
10443*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
10444*dc5640d1SHerbert Xue requestStaticInjection()} statements:
10445*dc5640d1SHerbert Xue <pre>
10446*dc5640d1SHerbert Xue     requestStaticInjection(MyLegacyService.class);</pre>
10447*dc5640d1SHerbert Xue
10448*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10449*dc5640d1SHerbert Xue @since 2.0]]>
10450*dc5640d1SHerbert Xue    </doc>
10451*dc5640d1SHerbert Xue  </class>
10452*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.StaticInjectionRequest -->
10453*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.Toolable -->
10454*dc5640d1SHerbert Xue  <class name="Toolable"    abstract="true"
10455*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10456*dc5640d1SHerbert Xue    deprecated="not deprecated">
10457*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
10458*dc5640d1SHerbert Xue    <doc>
10459*dc5640d1SHerbert Xue    <![CDATA[Instructs an {@link Injector} running in {@link Stage#TOOL} that a method should be injected.
10460*dc5640d1SHerbert Xue This is typically useful for for extensions to Guice that perform additional validation in an
10461*dc5640d1SHerbert Xue injected method or field.  This only applies to objects that are already constructed when
10462*dc5640d1SHerbert Xue bindings are created (ie., something bound using {@link
10463*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toProvider toProvider}, {@link
10464*dc5640d1SHerbert Xue com.google.inject.binder.LinkedBindingBuilder#toInstance toInstance}, or {@link
10465*dc5640d1SHerbert Xue com.google.inject.Binder#requestInjection requestInjection}.
10466*dc5640d1SHerbert Xue
10467*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
10468*dc5640d1SHerbert Xue @since 3.0]]>
10469*dc5640d1SHerbert Xue    </doc>
10470*dc5640d1SHerbert Xue  </class>
10471*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.Toolable -->
10472*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeConverter -->
10473*dc5640d1SHerbert Xue  <interface name="TypeConverter"    abstract="true"
10474*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10475*dc5640d1SHerbert Xue    deprecated="not deprecated">
10476*dc5640d1SHerbert Xue    <method name="convert" return="java.lang.Object"
10477*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10478*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10479*dc5640d1SHerbert Xue      deprecated="not deprecated">
10480*dc5640d1SHerbert Xue      <param name="value" type="java.lang.String"/>
10481*dc5640d1SHerbert Xue      <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
10482*dc5640d1SHerbert Xue      <doc>
10483*dc5640d1SHerbert Xue      <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
10484*dc5640d1SHerbert Xue      </doc>
10485*dc5640d1SHerbert Xue    </method>
10486*dc5640d1SHerbert Xue    <doc>
10487*dc5640d1SHerbert Xue    <![CDATA[Converts constant string values to a different type.
10488*dc5640d1SHerbert Xue
10489*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
10490*dc5640d1SHerbert Xue @since 2.0]]>
10491*dc5640d1SHerbert Xue    </doc>
10492*dc5640d1SHerbert Xue  </interface>
10493*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeConverter -->
10494*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeConverterBinding -->
10495*dc5640d1SHerbert Xue  <class name="TypeConverterBinding" extends="java.lang.Object"
10496*dc5640d1SHerbert Xue    abstract="false"
10497*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10498*dc5640d1SHerbert Xue    deprecated="not deprecated">
10499*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10500*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"
10501*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10502*dc5640d1SHerbert Xue      deprecated="not deprecated">
10503*dc5640d1SHerbert Xue      <doc>
10504*dc5640d1SHerbert Xue      <![CDATA[@since 3.0]]>
10505*dc5640d1SHerbert Xue      </doc>
10506*dc5640d1SHerbert Xue    </constructor>
10507*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10508*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10509*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10510*dc5640d1SHerbert Xue      deprecated="not deprecated">
10511*dc5640d1SHerbert Xue    </method>
10512*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10513*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10514*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10515*dc5640d1SHerbert Xue      deprecated="not deprecated">
10516*dc5640d1SHerbert Xue    </method>
10517*dc5640d1SHerbert Xue    <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
10518*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10519*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10520*dc5640d1SHerbert Xue      deprecated="not deprecated">
10521*dc5640d1SHerbert Xue    </method>
10522*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10523*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10524*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10525*dc5640d1SHerbert Xue      deprecated="not deprecated">
10526*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10527*dc5640d1SHerbert Xue    </method>
10528*dc5640d1SHerbert Xue    <method name="applyTo"
10529*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10530*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10531*dc5640d1SHerbert Xue      deprecated="not deprecated">
10532*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10533*dc5640d1SHerbert Xue    </method>
10534*dc5640d1SHerbert Xue    <method name="toString" return="java.lang.String"
10535*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10536*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10537*dc5640d1SHerbert Xue      deprecated="not deprecated">
10538*dc5640d1SHerbert Xue    </method>
10539*dc5640d1SHerbert Xue    <doc>
10540*dc5640d1SHerbert Xue    <![CDATA[Registration of type converters for matching target types. Instances are created
10541*dc5640d1SHerbert Xue explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
10542*dc5640d1SHerbert Xue TypeConverter) convertToTypes()} statements:
10543*dc5640d1SHerbert Xue <pre>
10544*dc5640d1SHerbert Xue     convertToTypes(Matchers.only(TypeLiteral.get(DateTime.class)), new DateTimeConverter());</pre>
10545*dc5640d1SHerbert Xue
10546*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10547*dc5640d1SHerbert Xue @since 2.0]]>
10548*dc5640d1SHerbert Xue    </doc>
10549*dc5640d1SHerbert Xue  </class>
10550*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeConverterBinding -->
10551*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeEncounter -->
10552*dc5640d1SHerbert Xue  <interface name="TypeEncounter"    abstract="true"
10553*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10554*dc5640d1SHerbert Xue    deprecated="not deprecated">
10555*dc5640d1SHerbert Xue    <method name="addError"
10556*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10557*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10558*dc5640d1SHerbert Xue      deprecated="not deprecated">
10559*dc5640d1SHerbert Xue      <param name="message" type="java.lang.String"/>
10560*dc5640d1SHerbert Xue      <param name="arguments" type="java.lang.Object[]"/>
10561*dc5640d1SHerbert Xue      <doc>
10562*dc5640d1SHerbert Xue      <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
10563*dc5640d1SHerbert Xue time. Unlike throwing an exception, this enable us to continue configuring the Injector and
10564*dc5640d1SHerbert Xue discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
10565*dc5640d1SHerbert Xue into the message.]]>
10566*dc5640d1SHerbert Xue      </doc>
10567*dc5640d1SHerbert Xue    </method>
10568*dc5640d1SHerbert Xue    <method name="addError"
10569*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10570*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10571*dc5640d1SHerbert Xue      deprecated="not deprecated">
10572*dc5640d1SHerbert Xue      <param name="t" type="java.lang.Throwable"/>
10573*dc5640d1SHerbert Xue      <doc>
10574*dc5640d1SHerbert Xue      <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
10575*dc5640d1SHerbert Xue message of which will be presented to the user at a later time. If your type listener calls
10576*dc5640d1SHerbert Xue something that you worry may fail, you should catch the exception and pass it to this method.]]>
10577*dc5640d1SHerbert Xue      </doc>
10578*dc5640d1SHerbert Xue    </method>
10579*dc5640d1SHerbert Xue    <method name="addError"
10580*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10581*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10582*dc5640d1SHerbert Xue      deprecated="not deprecated">
10583*dc5640d1SHerbert Xue      <param name="message" type="com.google.inject.spi.Message"/>
10584*dc5640d1SHerbert Xue      <doc>
10585*dc5640d1SHerbert Xue      <![CDATA[Records an error message to be presented to the user at a later time.]]>
10586*dc5640d1SHerbert Xue      </doc>
10587*dc5640d1SHerbert Xue    </method>
10588*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10589*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10590*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10591*dc5640d1SHerbert Xue      deprecated="not deprecated">
10592*dc5640d1SHerbert Xue      <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
10593*dc5640d1SHerbert Xue      <doc>
10594*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
10595*dc5640d1SHerbert Xue provider will not be valid until the injector has been created. The provider will throw an
10596*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
10597*dc5640d1SHerbert Xue      </doc>
10598*dc5640d1SHerbert Xue    </method>
10599*dc5640d1SHerbert Xue    <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
10600*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10601*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10602*dc5640d1SHerbert Xue      deprecated="not deprecated">
10603*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10604*dc5640d1SHerbert Xue      <doc>
10605*dc5640d1SHerbert Xue      <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
10606*dc5640d1SHerbert Xue provider will not be valid until the injector has been created. The provider will throw an
10607*dc5640d1SHerbert Xue {@code IllegalStateException} if you try to use it beforehand.]]>
10608*dc5640d1SHerbert Xue      </doc>
10609*dc5640d1SHerbert Xue    </method>
10610*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10611*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10612*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10613*dc5640d1SHerbert Xue      deprecated="not deprecated">
10614*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
10615*dc5640d1SHerbert Xue      <doc>
10616*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10617*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
10618*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
10619*dc5640d1SHerbert Xue if you try to use it beforehand.
10620*dc5640d1SHerbert Xue
10621*dc5640d1SHerbert Xue @param typeLiteral type to get members injector for]]>
10622*dc5640d1SHerbert Xue      </doc>
10623*dc5640d1SHerbert Xue    </method>
10624*dc5640d1SHerbert Xue    <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
10625*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10626*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10627*dc5640d1SHerbert Xue      deprecated="not deprecated">
10628*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10629*dc5640d1SHerbert Xue      <doc>
10630*dc5640d1SHerbert Xue      <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
10631*dc5640d1SHerbert Xue of the given type {@code T}. The returned members injector will not be valid until the main
10632*dc5640d1SHerbert Xue injector has been created. The members injector will throw an {@code IllegalStateException}
10633*dc5640d1SHerbert Xue if you try to use it beforehand.
10634*dc5640d1SHerbert Xue
10635*dc5640d1SHerbert Xue @param type type to get members injector for]]>
10636*dc5640d1SHerbert Xue      </doc>
10637*dc5640d1SHerbert Xue    </method>
10638*dc5640d1SHerbert Xue    <method name="register"
10639*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10640*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10641*dc5640d1SHerbert Xue      deprecated="not deprecated">
10642*dc5640d1SHerbert Xue      <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
10643*dc5640d1SHerbert Xue      <doc>
10644*dc5640d1SHerbert Xue      <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
10645*dc5640d1SHerbert Xue performed its own injections on an instance of {@code I}.]]>
10646*dc5640d1SHerbert Xue      </doc>
10647*dc5640d1SHerbert Xue    </method>
10648*dc5640d1SHerbert Xue    <method name="register"
10649*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10650*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10651*dc5640d1SHerbert Xue      deprecated="not deprecated">
10652*dc5640d1SHerbert Xue      <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
10653*dc5640d1SHerbert Xue      <doc>
10654*dc5640d1SHerbert Xue      <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
10655*dc5640d1SHerbert Xue injections have been performed on an instance of {@code I}.]]>
10656*dc5640d1SHerbert Xue      </doc>
10657*dc5640d1SHerbert Xue    </method>
10658*dc5640d1SHerbert Xue    <method name="bindInterceptor"
10659*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10660*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10661*dc5640d1SHerbert Xue      deprecated="not deprecated">
10662*dc5640d1SHerbert Xue      <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
10663*dc5640d1SHerbert Xue      <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
10664*dc5640d1SHerbert Xue      <doc>
10665*dc5640d1SHerbert Xue      <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
10666*dc5640d1SHerbert Xue method is eligible for interception if:
10667*dc5640d1SHerbert Xue
10668*dc5640d1SHerbert Xue <ul>
10669*dc5640d1SHerbert Xue  <li>Guice created the instance the method is on</li>
10670*dc5640d1SHerbert Xue  <li>Neither the enclosing type nor the method is final</li>
10671*dc5640d1SHerbert Xue  <li>And the method is package-private or more accessible</li>
10672*dc5640d1SHerbert Xue </ul>
10673*dc5640d1SHerbert Xue
10674*dc5640d1SHerbert Xue @param methodMatcher matches methods the interceptor should apply to. For
10675*dc5640d1SHerbert Xue     example: {@code annotatedWith(Transactional.class)}.
10676*dc5640d1SHerbert Xue @param interceptors to bind]]>
10677*dc5640d1SHerbert Xue      </doc>
10678*dc5640d1SHerbert Xue    </method>
10679*dc5640d1SHerbert Xue    <doc>
10680*dc5640d1SHerbert Xue    <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
10681*dc5640d1SHerbert Xue listeners and binding method interceptors for injectable type {@code I}. It is an error to use
10682*dc5640d1SHerbert Xue an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
10683*dc5640d1SHerbert Xue returned.
10684*dc5640d1SHerbert Xue
10685*dc5640d1SHerbert Xue @param <I> the injectable type encountered
10686*dc5640d1SHerbert Xue @since 2.0]]>
10687*dc5640d1SHerbert Xue    </doc>
10688*dc5640d1SHerbert Xue  </interface>
10689*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeEncounter -->
10690*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.TypeListener -->
10691*dc5640d1SHerbert Xue  <interface name="TypeListener"    abstract="true"
10692*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10693*dc5640d1SHerbert Xue    deprecated="not deprecated">
10694*dc5640d1SHerbert Xue    <method name="hear"
10695*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
10696*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10697*dc5640d1SHerbert Xue      deprecated="not deprecated">
10698*dc5640d1SHerbert Xue      <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
10699*dc5640d1SHerbert Xue      <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
10700*dc5640d1SHerbert Xue      <doc>
10701*dc5640d1SHerbert Xue      <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
10702*dc5640d1SHerbert Xue Called during injector creation (or afterwords if Guice encounters a type at run time and
10703*dc5640d1SHerbert Xue creates a JIT binding).
10704*dc5640d1SHerbert Xue
10705*dc5640d1SHerbert Xue @param type encountered by Guice
10706*dc5640d1SHerbert Xue @param encounter context of this encounter, enables reporting errors, registering injection
10707*dc5640d1SHerbert Xue     listeners and binding method interceptors for {@code type}.
10708*dc5640d1SHerbert Xue
10709*dc5640d1SHerbert Xue @param <I> the injectable type]]>
10710*dc5640d1SHerbert Xue      </doc>
10711*dc5640d1SHerbert Xue    </method>
10712*dc5640d1SHerbert Xue    <doc>
10713*dc5640d1SHerbert Xue    <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
10714*dc5640d1SHerbert Xue one situation but only its methods and fields injected in another, Guice will notify this
10715*dc5640d1SHerbert Xue listener once.
10716*dc5640d1SHerbert Xue
10717*dc5640d1SHerbert Xue <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
10718*dc5640d1SHerbert Xue registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
10719*dc5640d1SHerbert Xue com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
10720*dc5640d1SHerbert Xue binding method interceptors}.
10721*dc5640d1SHerbert Xue
10722*dc5640d1SHerbert Xue @since 2.0]]>
10723*dc5640d1SHerbert Xue    </doc>
10724*dc5640d1SHerbert Xue  </interface>
10725*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.TypeListener -->
10726*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spi.TypeListenerBinding -->
10727*dc5640d1SHerbert Xue  <class name="TypeListenerBinding" extends="java.lang.Object"
10728*dc5640d1SHerbert Xue    abstract="false"
10729*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10730*dc5640d1SHerbert Xue    deprecated="not deprecated">
10731*dc5640d1SHerbert Xue    <implements name="com.google.inject.spi.Element"/>
10732*dc5640d1SHerbert Xue    <method name="getListener" return="com.google.inject.spi.TypeListener"
10733*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10734*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10735*dc5640d1SHerbert Xue      deprecated="not deprecated">
10736*dc5640d1SHerbert Xue      <doc>
10737*dc5640d1SHerbert Xue      <![CDATA[Returns the registered listener.]]>
10738*dc5640d1SHerbert Xue      </doc>
10739*dc5640d1SHerbert Xue    </method>
10740*dc5640d1SHerbert Xue    <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
10741*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10742*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10743*dc5640d1SHerbert Xue      deprecated="not deprecated">
10744*dc5640d1SHerbert Xue      <doc>
10745*dc5640d1SHerbert Xue      <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
10746*dc5640d1SHerbert Xue      </doc>
10747*dc5640d1SHerbert Xue    </method>
10748*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.Object"
10749*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10750*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10751*dc5640d1SHerbert Xue      deprecated="not deprecated">
10752*dc5640d1SHerbert Xue    </method>
10753*dc5640d1SHerbert Xue    <method name="acceptVisitor" return="T"
10754*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10755*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10756*dc5640d1SHerbert Xue      deprecated="not deprecated">
10757*dc5640d1SHerbert Xue      <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
10758*dc5640d1SHerbert Xue    </method>
10759*dc5640d1SHerbert Xue    <method name="applyTo"
10760*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10761*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10762*dc5640d1SHerbert Xue      deprecated="not deprecated">
10763*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10764*dc5640d1SHerbert Xue    </method>
10765*dc5640d1SHerbert Xue    <doc>
10766*dc5640d1SHerbert Xue    <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
10767*dc5640d1SHerbert Xue a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
10768*dc5640d1SHerbert Xue
10769*dc5640d1SHerbert Xue <pre>
10770*dc5640d1SHerbert Xue     register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
10771*dc5640d1SHerbert Xue
10772*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10773*dc5640d1SHerbert Xue @since 2.0]]>
10774*dc5640d1SHerbert Xue    </doc>
10775*dc5640d1SHerbert Xue  </class>
10776*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spi.TypeListenerBinding -->
10777*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.spi.UntargettedBinding -->
10778*dc5640d1SHerbert Xue  <interface name="UntargettedBinding"    abstract="true"
10779*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10780*dc5640d1SHerbert Xue    deprecated="not deprecated">
10781*dc5640d1SHerbert Xue    <implements name="com.google.inject.Binding&lt;T&gt;"/>
10782*dc5640d1SHerbert Xue    <doc>
10783*dc5640d1SHerbert Xue    <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
10784*dc5640d1SHerbert Xue strategies to resolve injections.
10785*dc5640d1SHerbert Xue
10786*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
10787*dc5640d1SHerbert Xue @since 2.0]]>
10788*dc5640d1SHerbert Xue    </doc>
10789*dc5640d1SHerbert Xue  </interface>
10790*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.spi.UntargettedBinding -->
10791*dc5640d1SHerbert Xue</package>
10792*dc5640d1SHerbert Xue<package name="com.google.inject.spring">
10793*dc5640d1SHerbert Xue  <!-- start class com.google.inject.spring.SpringIntegration -->
10794*dc5640d1SHerbert Xue  <class name="SpringIntegration" extends="java.lang.Object"
10795*dc5640d1SHerbert Xue    abstract="false"
10796*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10797*dc5640d1SHerbert Xue    deprecated="not deprecated">
10798*dc5640d1SHerbert Xue    <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
10799*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10800*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10801*dc5640d1SHerbert Xue      deprecated="not deprecated">
10802*dc5640d1SHerbert Xue      <param name="type" type="java.lang.Class&lt;T&gt;"/>
10803*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
10804*dc5640d1SHerbert Xue      <doc>
10805*dc5640d1SHerbert Xue      <![CDATA[Creates a provider which looks up objects from Spring using the given name.
10806*dc5640d1SHerbert Xue Expects a binding to {@link
10807*dc5640d1SHerbert Xue org.springframework.beans.factory.BeanFactory}. Example usage:
10808*dc5640d1SHerbert Xue
10809*dc5640d1SHerbert Xue <pre>
10810*dc5640d1SHerbert Xue bind(DataSource.class)
10811*dc5640d1SHerbert Xue   .toProvider(fromSpring(DataSource.class, "dataSource"));
10812*dc5640d1SHerbert Xue </pre>]]>
10813*dc5640d1SHerbert Xue      </doc>
10814*dc5640d1SHerbert Xue    </method>
10815*dc5640d1SHerbert Xue    <method name="bindAll"
10816*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10817*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10818*dc5640d1SHerbert Xue      deprecated="not deprecated">
10819*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10820*dc5640d1SHerbert Xue      <param name="beanFactory" type="org.springframework.beans.factory.ListableBeanFactory"/>
10821*dc5640d1SHerbert Xue      <doc>
10822*dc5640d1SHerbert Xue      <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
10823*dc5640d1SHerbert Xue named "foo", this method creates a binding to the bean's type and
10824*dc5640d1SHerbert Xue {@code @Named("foo")}.
10825*dc5640d1SHerbert Xue
10826*dc5640d1SHerbert Xue @see com.google.inject.name.Named
10827*dc5640d1SHerbert Xue @see com.google.inject.name.Names#named(String)]]>
10828*dc5640d1SHerbert Xue      </doc>
10829*dc5640d1SHerbert Xue    </method>
10830*dc5640d1SHerbert Xue    <doc>
10831*dc5640d1SHerbert Xue    <![CDATA[Integrates Guice with Spring.
10832*dc5640d1SHerbert Xue
10833*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
10834*dc5640d1SHerbert Xue    </doc>
10835*dc5640d1SHerbert Xue  </class>
10836*dc5640d1SHerbert Xue  <!-- end class com.google.inject.spring.SpringIntegration -->
10837*dc5640d1SHerbert Xue</package>
10838*dc5640d1SHerbert Xue<package name="com.google.inject.struts2">
10839*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
10840*dc5640d1SHerbert Xue  <class name="GuiceObjectFactory" extends="com.opensymphony.xwork2.ObjectFactory"
10841*dc5640d1SHerbert Xue    abstract="false"
10842*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10843*dc5640d1SHerbert Xue    deprecated="Use {@link com.google.inject.struts2.Struts2Factory} instead.">
10844*dc5640d1SHerbert Xue    <constructor name="GuiceObjectFactory"
10845*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10846*dc5640d1SHerbert Xue      deprecated="not deprecated">
10847*dc5640d1SHerbert Xue    </constructor>
10848*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
10849*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10850*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10851*dc5640d1SHerbert Xue      deprecated="not deprecated">
10852*dc5640d1SHerbert Xue    </method>
10853*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class"
10854*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10855*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10856*dc5640d1SHerbert Xue      deprecated="not deprecated">
10857*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
10858*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10859*dc5640d1SHerbert Xue    </method>
10860*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
10861*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10862*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10863*dc5640d1SHerbert Xue      deprecated="not deprecated">
10864*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
10865*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map"/>
10866*dc5640d1SHerbert Xue    </method>
10867*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10868*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10869*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10870*dc5640d1SHerbert Xue      deprecated="not deprecated">
10871*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10872*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
10873*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10874*dc5640d1SHerbert Xue    </method>
10875*dc5640d1SHerbert Xue    <doc>
10876*dc5640d1SHerbert Xue    <![CDATA[@deprecated Use {@link com.google.inject.struts2.Struts2Factory} instead.]]>
10877*dc5640d1SHerbert Xue    </doc>
10878*dc5640d1SHerbert Xue  </class>
10879*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
10880*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2Factory -->
10881*dc5640d1SHerbert Xue  <class name="Struts2Factory" extends="com.opensymphony.xwork2.ObjectFactory"
10882*dc5640d1SHerbert Xue    abstract="false"
10883*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10884*dc5640d1SHerbert Xue    deprecated="not deprecated">
10885*dc5640d1SHerbert Xue    <constructor name="Struts2Factory"
10886*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10887*dc5640d1SHerbert Xue      deprecated="not deprecated">
10888*dc5640d1SHerbert Xue    </constructor>
10889*dc5640d1SHerbert Xue    <method name="isNoArgConstructorRequired" return="boolean"
10890*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10891*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10892*dc5640d1SHerbert Xue      deprecated="not deprecated">
10893*dc5640d1SHerbert Xue    </method>
10894*dc5640d1SHerbert Xue    <method name="getClassInstance" return="java.lang.Class&lt;?&gt;"
10895*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10896*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10897*dc5640d1SHerbert Xue      deprecated="not deprecated">
10898*dc5640d1SHerbert Xue      <param name="name" type="java.lang.String"/>
10899*dc5640d1SHerbert Xue      <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
10900*dc5640d1SHerbert Xue    </method>
10901*dc5640d1SHerbert Xue    <method name="buildBean" return="java.lang.Object"
10902*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10903*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10904*dc5640d1SHerbert Xue      deprecated="not deprecated">
10905*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class"/>
10906*dc5640d1SHerbert Xue      <param name="extraContext" type="java.util.Map&lt;java.lang.String, java.lang.Object&gt;"/>
10907*dc5640d1SHerbert Xue    </method>
10908*dc5640d1SHerbert Xue    <method name="buildInterceptor" return="com.opensymphony.xwork2.interceptor.Interceptor"
10909*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10910*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10911*dc5640d1SHerbert Xue      deprecated="not deprecated">
10912*dc5640d1SHerbert Xue      <param name="interceptorConfig" type="com.opensymphony.xwork2.config.entities.InterceptorConfig"/>
10913*dc5640d1SHerbert Xue      <param name="interceptorRefParams" type="java.util.Map"/>
10914*dc5640d1SHerbert Xue      <exception name="ConfigurationException" type="com.opensymphony.xwork2.config.ConfigurationException"/>
10915*dc5640d1SHerbert Xue    </method>
10916*dc5640d1SHerbert Xue    <doc>
10917*dc5640d1SHerbert Xue    <![CDATA[Cleanup up version from Bob's GuiceObjectFactory. Now works properly with
10918*dc5640d1SHerbert Xue GS2 and fixes several bugs.
10919*dc5640d1SHerbert Xue
10920*dc5640d1SHerbert Xue @author [email protected]
10921*dc5640d1SHerbert Xue @author benmccann.com]]>
10922*dc5640d1SHerbert Xue    </doc>
10923*dc5640d1SHerbert Xue  </class>
10924*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2Factory -->
10925*dc5640d1SHerbert Xue  <!-- start class com.google.inject.struts2.Struts2GuicePluginModule -->
10926*dc5640d1SHerbert Xue  <class name="Struts2GuicePluginModule" extends="com.google.inject.AbstractModule"
10927*dc5640d1SHerbert Xue    abstract="false"
10928*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10929*dc5640d1SHerbert Xue    deprecated="not deprecated">
10930*dc5640d1SHerbert Xue    <constructor name="Struts2GuicePluginModule"
10931*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10932*dc5640d1SHerbert Xue      deprecated="not deprecated">
10933*dc5640d1SHerbert Xue    </constructor>
10934*dc5640d1SHerbert Xue    <method name="configure"
10935*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10936*dc5640d1SHerbert Xue      static="false" final="false" visibility="protected"
10937*dc5640d1SHerbert Xue      deprecated="not deprecated">
10938*dc5640d1SHerbert Xue    </method>
10939*dc5640d1SHerbert Xue    <doc>
10940*dc5640d1SHerbert Xue    <![CDATA[Initializes the Struts 2 Guice Plugin. Must be added to the injector returned
10941*dc5640d1SHerbert Xue by {@link com.google.inject.servlet.GuiceServletContextListener#getInjector}.
10942*dc5640d1SHerbert Xue
10943*dc5640d1SHerbert Xue @author benmccann.com]]>
10944*dc5640d1SHerbert Xue    </doc>
10945*dc5640d1SHerbert Xue  </class>
10946*dc5640d1SHerbert Xue  <!-- end class com.google.inject.struts2.Struts2GuicePluginModule -->
10947*dc5640d1SHerbert Xue</package>
10948*dc5640d1SHerbert Xue<package name="com.google.inject.testing.fieldbinder">
10949*dc5640d1SHerbert Xue  <!-- start class com.google.inject.testing.fieldbinder.Bind -->
10950*dc5640d1SHerbert Xue  <class name="Bind"    abstract="true"
10951*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
10952*dc5640d1SHerbert Xue    deprecated="not deprecated">
10953*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
10954*dc5640d1SHerbert Xue    <doc>
10955*dc5640d1SHerbert Xue    <![CDATA[Annotation used by {@link BoundFieldModule} to indicate that a field should be bound to its
10956*dc5640d1SHerbert Xue value using Guice.
10957*dc5640d1SHerbert Xue
10958*dc5640d1SHerbert Xue @see BoundFieldModule
10959*dc5640d1SHerbert Xue @author [email protected] (Russ Harmon)]]>
10960*dc5640d1SHerbert Xue    </doc>
10961*dc5640d1SHerbert Xue  </class>
10962*dc5640d1SHerbert Xue  <!-- end class com.google.inject.testing.fieldbinder.Bind -->
10963*dc5640d1SHerbert Xue  <!-- start class com.google.inject.testing.fieldbinder.BoundFieldModule -->
10964*dc5640d1SHerbert Xue  <class name="BoundFieldModule" extends="java.lang.Object"
10965*dc5640d1SHerbert Xue    abstract="false"
10966*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
10967*dc5640d1SHerbert Xue    deprecated="not deprecated">
10968*dc5640d1SHerbert Xue    <implements name="com.google.inject.Module"/>
10969*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.testing.fieldbinder.BoundFieldModule"
10970*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10971*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
10972*dc5640d1SHerbert Xue      deprecated="not deprecated">
10973*dc5640d1SHerbert Xue      <param name="instance" type="java.lang.Object"/>
10974*dc5640d1SHerbert Xue      <doc>
10975*dc5640d1SHerbert Xue      <![CDATA[Create a BoundFieldModule which binds the {@link Bind} annotated fields of {@code instance}.
10976*dc5640d1SHerbert Xue
10977*dc5640d1SHerbert Xue @param instance the instance whose fields will be bound.
10978*dc5640d1SHerbert Xue @return a module which will bind the {@link Bind} annotated fields of {@code instance}.]]>
10979*dc5640d1SHerbert Xue      </doc>
10980*dc5640d1SHerbert Xue    </method>
10981*dc5640d1SHerbert Xue    <method name="configure"
10982*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
10983*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
10984*dc5640d1SHerbert Xue      deprecated="not deprecated">
10985*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
10986*dc5640d1SHerbert Xue    </method>
10987*dc5640d1SHerbert Xue    <doc>
10988*dc5640d1SHerbert Xue    <![CDATA[Automatically creates Guice bindings for fields in an object annotated with {@link Bind}.
10989*dc5640d1SHerbert Xue
10990*dc5640d1SHerbert Xue <p>This module is intended for use in tests to reduce the code needed to bind local fields
10991*dc5640d1SHerbert Xue (usually mocks) for injection.
10992*dc5640d1SHerbert Xue
10993*dc5640d1SHerbert Xue <p>The following rules are followed in determining how fields are bound using this module:
10994*dc5640d1SHerbert Xue
10995*dc5640d1SHerbert Xue <ul>
10996*dc5640d1SHerbert Xue <li>
10997*dc5640d1SHerbert Xue For each {@link Bind} annotated field of an object and its superclasses, this module will bind
10998*dc5640d1SHerbert Xue that field's type to that field's value at injector creation time. This includes both instance
10999*dc5640d1SHerbert Xue and static fields.
11000*dc5640d1SHerbert Xue </li>
11001*dc5640d1SHerbert Xue <li>
11002*dc5640d1SHerbert Xue If {@link Bind#to} is specified, the field's value will be bound to the class specified by
11003*dc5640d1SHerbert Xue {@link Bind#to} instead of the field's actual type.
11004*dc5640d1SHerbert Xue </li>
11005*dc5640d1SHerbert Xue <li>
11006*dc5640d1SHerbert Xue If a {@link BindingAnnotation} or {@link javax.inject.Qualifier} is present on the field,
11007*dc5640d1SHerbert Xue that field will be bound using that annotation via {@link AnnotatedBindingBuilder#annotatedWith}.
11008*dc5640d1SHerbert Xue For example, {@code bind(Foo.class).annotatedWith(BarAnnotation.class).toInstance(theValue)}.
11009*dc5640d1SHerbert Xue It is an error to supply more than one {@link BindingAnnotation} or
11010*dc5640d1SHerbert Xue {@link javax.inject.Qualifier}.
11011*dc5640d1SHerbert Xue </li>
11012*dc5640d1SHerbert Xue <li>
11013*dc5640d1SHerbert Xue If the field is of type {@link Provider}, the field's value will be bound as a {@link Provider}
11014*dc5640d1SHerbert Xue using {@link LinkedBindingBuilder#toProvider} to the provider's parameterized type. For example,
11015*dc5640d1SHerbert Xue {@code Provider<Integer>} binds to {@link Integer}. Attempting to bind a non-parameterized
11016*dc5640d1SHerbert Xue {@link Provider} without a {@link Bind#to} clause is an error.
11017*dc5640d1SHerbert Xue </li>
11018*dc5640d1SHerbert Xue </ul>
11019*dc5640d1SHerbert Xue
11020*dc5640d1SHerbert Xue <p>Example use:
11021*dc5640d1SHerbert Xue <pre><code>
11022*dc5640d1SHerbert Xue public class TestFoo {
11023*dc5640d1SHerbert Xue   // bind(new TypeLiteral{@code <List<Object>>}() {}).toInstance(listOfObjects);
11024*dc5640d1SHerbert Xue   {@literal @}Bind private List{@code <Object>} listOfObjects = Lists.of();
11025*dc5640d1SHerbert Xue
11026*dc5640d1SHerbert Xue   // bind(String.class).toProvider(new Provider() { public String get() { return userName; }});
11027*dc5640d1SHerbert Xue   {@literal @}Bind(lazy = true) private String userName;
11028*dc5640d1SHerbert Xue
11029*dc5640d1SHerbert Xue   // bind(SuperClass.class).toInstance(aSubClass);
11030*dc5640d1SHerbert Xue   {@literal @}Bind(to = SuperClass.class) private SubClass aSubClass = new SubClass();
11031*dc5640d1SHerbert Xue
11032*dc5640d1SHerbert Xue   // bind(Object.class).annotatedWith(MyBindingAnnotation.class).toInstance(object2);
11033*dc5640d1SHerbert Xue   {@literal @}Bind
11034*dc5640d1SHerbert Xue   {@literal @}MyBindingAnnotation
11035*dc5640d1SHerbert Xue   private String myString = "hello";
11036*dc5640d1SHerbert Xue
11037*dc5640d1SHerbert Xue   // bind(Object.class).toProvider(myProvider);
11038*dc5640d1SHerbert Xue   {@literal @}Bind private Provider{@code <Object>} myProvider = getProvider();
11039*dc5640d1SHerbert Xue
11040*dc5640d1SHerbert Xue   {@literal @}Before public void setUp() {
11041*dc5640d1SHerbert Xue     Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
11042*dc5640d1SHerbert Xue   }
11043*dc5640d1SHerbert Xue }
11044*dc5640d1SHerbert Xue </code></pre>
11045*dc5640d1SHerbert Xue
11046*dc5640d1SHerbert Xue @see Bind
11047*dc5640d1SHerbert Xue @author [email protected] (Russ Harmon)]]>
11048*dc5640d1SHerbert Xue    </doc>
11049*dc5640d1SHerbert Xue  </class>
11050*dc5640d1SHerbert Xue  <!-- end class com.google.inject.testing.fieldbinder.BoundFieldModule -->
11051*dc5640d1SHerbert Xue</package>
11052*dc5640d1SHerbert Xue<package name="com.google.inject.throwingproviders">
11053*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.CheckedProvider -->
11054*dc5640d1SHerbert Xue  <interface name="CheckedProvider"    abstract="true"
11055*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11056*dc5640d1SHerbert Xue    deprecated="not deprecated">
11057*dc5640d1SHerbert Xue    <method name="get" return="T"
11058*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11059*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11060*dc5640d1SHerbert Xue      deprecated="not deprecated">
11061*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11062*dc5640d1SHerbert Xue    </method>
11063*dc5640d1SHerbert Xue    <doc>
11064*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11065*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
11066*dc5640d1SHerbert Xue
11067*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
11068*dc5640d1SHerbert Xue Such subinterfaces may not define new methods, but may narrow the exception type.
11069*dc5640d1SHerbert Xue <pre>
11070*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends CheckedProvider&lt;T&gt; {
11071*dc5640d1SHerbert Xue   T get() throws CustomExceptionOne, CustomExceptionTwo;
11072*dc5640d1SHerbert Xue }
11073*dc5640d1SHerbert Xue </pre>
11074*dc5640d1SHerbert Xue
11075*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11076*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11077*dc5640d1SHerbert Xue will invoked at most once within each scope.
11078*dc5640d1SHerbert Xue
11079*dc5640d1SHerbert Xue @since 3.0]]>
11080*dc5640d1SHerbert Xue    </doc>
11081*dc5640d1SHerbert Xue  </interface>
11082*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.CheckedProvider -->
11083*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.CheckedProvides -->
11084*dc5640d1SHerbert Xue  <class name="CheckedProvides"    abstract="true"
11085*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11086*dc5640d1SHerbert Xue    deprecated="not deprecated">
11087*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
11088*dc5640d1SHerbert Xue    <doc>
11089*dc5640d1SHerbert Xue    <![CDATA[Annotates methods of a {@link com.google.inject.Module} to create a
11090*dc5640d1SHerbert Xue {@link CheckedProvider} method binding that can throw exceptions. The
11091*dc5640d1SHerbert Xue method's return type is bound to a {@link CheckedProvider} that can be
11092*dc5640d1SHerbert Xue injected. Guice will pass dependencies to the method as parameters. Install
11093*dc5640d1SHerbert Xue {@literal @}CheckedProvides methods by using
11094*dc5640d1SHerbert Xue {@link ThrowingProviderBinder#forModule(com.google.inject.Module)} on the
11095*dc5640d1SHerbert Xue module where the methods are declared.
11096*dc5640d1SHerbert Xue
11097*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
11098*dc5640d1SHerbert Xue @since 3.0]]>
11099*dc5640d1SHerbert Xue    </doc>
11100*dc5640d1SHerbert Xue  </class>
11101*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.CheckedProvides -->
11102*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingInject -->
11103*dc5640d1SHerbert Xue  <class name="ThrowingInject"    abstract="true"
11104*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11105*dc5640d1SHerbert Xue    deprecated="not deprecated">
11106*dc5640d1SHerbert Xue    <implements name="java.lang.annotation.Annotation"/>
11107*dc5640d1SHerbert Xue    <doc>
11108*dc5640d1SHerbert Xue    <![CDATA[A version of {@literal @}{@link Inject} designed for ThrowingProviders.  Use by:
11109*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11110*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11111*dc5640d1SHerbert Xue    .providing(CustomerImpl.class);
11112*dc5640d1SHerbert Xue </code></pre>
11113*dc5640d1SHerbert Xue where CustomerImpl has a constructor annotated with ThrowingInject.
11114*dc5640d1SHerbert Xue
11115*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)
11116*dc5640d1SHerbert Xue @since 4.0]]>
11117*dc5640d1SHerbert Xue    </doc>
11118*dc5640d1SHerbert Xue  </class>
11119*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingInject -->
11120*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
11121*dc5640d1SHerbert Xue  <interface name="ThrowingProvider"    abstract="true"
11122*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11123*dc5640d1SHerbert Xue    deprecated="use {@link CheckedProvider} instead.">
11124*dc5640d1SHerbert Xue    <implements name="com.google.inject.throwingproviders.CheckedProvider&lt;T&gt;"/>
11125*dc5640d1SHerbert Xue    <method name="get" return="T"
11126*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11127*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11128*dc5640d1SHerbert Xue      deprecated="not deprecated">
11129*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11130*dc5640d1SHerbert Xue    </method>
11131*dc5640d1SHerbert Xue    <doc>
11132*dc5640d1SHerbert Xue    <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
11133*dc5640d1SHerbert Xue a checked Exception. Users may not inject {@code T} directly.
11134*dc5640d1SHerbert Xue
11135*dc5640d1SHerbert Xue <p>This interface must be extended to use application-specific exception types.
11136*dc5640d1SHerbert Xue Such subinterfaces may not define new methods:
11137*dc5640d1SHerbert Xue <pre>
11138*dc5640d1SHerbert Xue public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
11139*dc5640d1SHerbert Xue </pre>
11140*dc5640d1SHerbert Xue
11141*dc5640d1SHerbert Xue <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
11142*dc5640d1SHerbert Xue or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
11143*dc5640d1SHerbert Xue will invoked at most once within each scope.
11144*dc5640d1SHerbert Xue
11145*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
11146*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11147*dc5640d1SHerbert Xue @deprecated use {@link CheckedProvider} instead.]]>
11148*dc5640d1SHerbert Xue    </doc>
11149*dc5640d1SHerbert Xue  </interface>
11150*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
11151*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11152*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder" extends="java.lang.Object"
11153*dc5640d1SHerbert Xue    abstract="false"
11154*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11155*dc5640d1SHerbert Xue    deprecated="not deprecated">
11156*dc5640d1SHerbert Xue    <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
11157*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11158*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11159*dc5640d1SHerbert Xue      deprecated="not deprecated">
11160*dc5640d1SHerbert Xue      <param name="binder" type="com.google.inject.Binder"/>
11161*dc5640d1SHerbert Xue    </method>
11162*dc5640d1SHerbert Xue    <method name="forModule" return="com.google.inject.Module"
11163*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11164*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11165*dc5640d1SHerbert Xue      deprecated="not deprecated">
11166*dc5640d1SHerbert Xue      <param name="module" type="com.google.inject.Module"/>
11167*dc5640d1SHerbert Xue      <doc>
11168*dc5640d1SHerbert Xue      <![CDATA[Returns a module that installs {@literal @}{@link CheckedProvides} methods.
11169*dc5640d1SHerbert Xue
11170*dc5640d1SHerbert Xue @since 3.0]]>
11171*dc5640d1SHerbert Xue      </doc>
11172*dc5640d1SHerbert Xue    </method>
11173*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, ?&gt;"
11174*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11175*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11176*dc5640d1SHerbert Xue      deprecated="Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.">
11177*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11178*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.reflect.Type"/>
11179*dc5640d1SHerbert Xue      <doc>
11180*dc5640d1SHerbert Xue      <![CDATA[@deprecated Use {@link #bind(Class, Class)} or {@link #bind(Class, TypeLiteral)} instead.]]>
11181*dc5640d1SHerbert Xue      </doc>
11182*dc5640d1SHerbert Xue    </method>
11183*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11184*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11185*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11186*dc5640d1SHerbert Xue      deprecated="not deprecated">
11187*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11188*dc5640d1SHerbert Xue      <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
11189*dc5640d1SHerbert Xue      <doc>
11190*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11191*dc5640d1SHerbert Xue      </doc>
11192*dc5640d1SHerbert Xue    </method>
11193*dc5640d1SHerbert Xue    <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11194*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11195*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11196*dc5640d1SHerbert Xue      deprecated="not deprecated">
11197*dc5640d1SHerbert Xue      <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
11198*dc5640d1SHerbert Xue      <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
11199*dc5640d1SHerbert Xue      <doc>
11200*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11201*dc5640d1SHerbert Xue      </doc>
11202*dc5640d1SHerbert Xue    </method>
11203*dc5640d1SHerbert Xue    <doc>
11204*dc5640d1SHerbert Xue    <![CDATA[<p>Builds a binding for a {@link CheckedProvider}.
11205*dc5640d1SHerbert Xue
11206*dc5640d1SHerbert Xue <p>You can use a fluent API and custom providers:
11207*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11208*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11209*dc5640d1SHerbert Xue    .to(RemoteCustomerProvider.class)
11210*dc5640d1SHerbert Xue    .in(RequestScope.class);
11211*dc5640d1SHerbert Xue </code></pre>
11212*dc5640d1SHerbert Xue or, you can use throwing provider methods:
11213*dc5640d1SHerbert Xue <pre><code>class MyModule extends AbstractModule {
11214*dc5640d1SHerbert Xue   configure() {
11215*dc5640d1SHerbert Xue     ThrowingProviderBinder.install(this, binder());
11216*dc5640d1SHerbert Xue   }
11217*dc5640d1SHerbert Xue
11218*dc5640d1SHerbert Xue   {@literal @}CheckedProvides(RemoteProvider.class)
11219*dc5640d1SHerbert Xue   {@literal @}RequestScope
11220*dc5640d1SHerbert Xue   Customer provideCustomer(FlakyCustomerCreator creator) throws RemoteException {
11221*dc5640d1SHerbert Xue     return creator.getCustomerOrThrow();
11222*dc5640d1SHerbert Xue   }
11223*dc5640d1SHerbert Xue }
11224*dc5640d1SHerbert Xue </code></pre>
11225*dc5640d1SHerbert Xue You also can declare that a CheckedProvider construct
11226*dc5640d1SHerbert Xue a particular class whose constructor throws an exception:
11227*dc5640d1SHerbert Xue <pre><code>ThrowingProviderBinder.create(binder())
11228*dc5640d1SHerbert Xue    .bind(RemoteProvider.class, Customer.class)
11229*dc5640d1SHerbert Xue    .providing(CustomerImpl.class)
11230*dc5640d1SHerbert Xue    .in(RequestScope.class);
11231*dc5640d1SHerbert Xue </code></pre>
11232*dc5640d1SHerbert Xue
11233*dc5640d1SHerbert Xue @author [email protected] (Jerome Mourits)
11234*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11235*dc5640d1SHerbert Xue @author [email protected] (Sam Berlin)]]>
11236*dc5640d1SHerbert Xue    </doc>
11237*dc5640d1SHerbert Xue  </class>
11238*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
11239*dc5640d1SHerbert Xue  <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11240*dc5640d1SHerbert Xue  <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
11241*dc5640d1SHerbert Xue    abstract="false"
11242*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11243*dc5640d1SHerbert Xue    deprecated="not deprecated">
11244*dc5640d1SHerbert Xue    <constructor name="SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
11245*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11246*dc5640d1SHerbert Xue      deprecated="not deprecated">
11247*dc5640d1SHerbert Xue    </constructor>
11248*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11249*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11250*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11251*dc5640d1SHerbert Xue      deprecated="not deprecated">
11252*dc5640d1SHerbert Xue      <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
11253*dc5640d1SHerbert Xue    </method>
11254*dc5640d1SHerbert Xue    <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11255*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11256*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11257*dc5640d1SHerbert Xue      deprecated="not deprecated">
11258*dc5640d1SHerbert Xue      <param name="annotation" type="java.lang.annotation.Annotation"/>
11259*dc5640d1SHerbert Xue    </method>
11260*dc5640d1SHerbert Xue    <method name="scopeExceptions" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P, T&gt;"
11261*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11262*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11263*dc5640d1SHerbert Xue      deprecated="not deprecated">
11264*dc5640d1SHerbert Xue      <param name="scopeExceptions" type="boolean"/>
11265*dc5640d1SHerbert Xue      <doc>
11266*dc5640d1SHerbert Xue      <![CDATA[Determines if exceptions should be scoped. By default exceptions are scoped.
11267*dc5640d1SHerbert Xue
11268*dc5640d1SHerbert Xue @param scopeExceptions whether exceptions should be scoped.
11269*dc5640d1SHerbert Xue @since 4.0]]>
11270*dc5640d1SHerbert Xue      </doc>
11271*dc5640d1SHerbert Xue    </method>
11272*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11273*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11274*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11275*dc5640d1SHerbert Xue      deprecated="not deprecated">
11276*dc5640d1SHerbert Xue      <param name="target" type="P extends com.google.inject.throwingproviders.CheckedProvider"/>
11277*dc5640d1SHerbert Xue    </method>
11278*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11279*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11280*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11281*dc5640d1SHerbert Xue      deprecated="not deprecated">
11282*dc5640d1SHerbert Xue      <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
11283*dc5640d1SHerbert Xue    </method>
11284*dc5640d1SHerbert Xue    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11285*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11286*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11287*dc5640d1SHerbert Xue      deprecated="not deprecated">
11288*dc5640d1SHerbert Xue      <param name="cxtorClass" type="java.lang.Class&lt;? extends T&gt;"/>
11289*dc5640d1SHerbert Xue      <doc>
11290*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11291*dc5640d1SHerbert Xue      </doc>
11292*dc5640d1SHerbert Xue    </method>
11293*dc5640d1SHerbert Xue    <method name="providing" return="com.google.inject.binder.ScopedBindingBuilder"
11294*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11295*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11296*dc5640d1SHerbert Xue      deprecated="not deprecated">
11297*dc5640d1SHerbert Xue      <param name="cxtorLiteral" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
11298*dc5640d1SHerbert Xue      <doc>
11299*dc5640d1SHerbert Xue      <![CDATA[@since 4.0]]>
11300*dc5640d1SHerbert Xue      </doc>
11301*dc5640d1SHerbert Xue    </method>
11302*dc5640d1SHerbert Xue    <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
11303*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11304*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11305*dc5640d1SHerbert Xue      deprecated="not deprecated">
11306*dc5640d1SHerbert Xue      <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
11307*dc5640d1SHerbert Xue    </method>
11308*dc5640d1SHerbert Xue  </class>
11309*dc5640d1SHerbert Xue  <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
11310*dc5640d1SHerbert Xue</package>
11311*dc5640d1SHerbert Xue<package name="com.google.inject.tools.jmx">
11312*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11313*dc5640d1SHerbert Xue  <interface name="ManagedBindingMBean"    abstract="true"
11314*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11315*dc5640d1SHerbert Xue    deprecated="not deprecated">
11316*dc5640d1SHerbert Xue    <method name="getSource" return="java.lang.String"
11317*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11318*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11319*dc5640d1SHerbert Xue      deprecated="not deprecated">
11320*dc5640d1SHerbert Xue      <doc>
11321*dc5640d1SHerbert Xue      <![CDATA[Gets the source of this binding.]]>
11322*dc5640d1SHerbert Xue      </doc>
11323*dc5640d1SHerbert Xue    </method>
11324*dc5640d1SHerbert Xue    <method name="getProvider" return="java.lang.String"
11325*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11326*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11327*dc5640d1SHerbert Xue      deprecated="not deprecated">
11328*dc5640d1SHerbert Xue      <doc>
11329*dc5640d1SHerbert Xue      <![CDATA[Gets the provider to which this binding is bound.]]>
11330*dc5640d1SHerbert Xue      </doc>
11331*dc5640d1SHerbert Xue    </method>
11332*dc5640d1SHerbert Xue    <method name="getKey" return="java.lang.String"
11333*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11334*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11335*dc5640d1SHerbert Xue      deprecated="not deprecated">
11336*dc5640d1SHerbert Xue      <doc>
11337*dc5640d1SHerbert Xue      <![CDATA[Gets the binding key.]]>
11338*dc5640d1SHerbert Xue      </doc>
11339*dc5640d1SHerbert Xue    </method>
11340*dc5640d1SHerbert Xue    <doc>
11341*dc5640d1SHerbert Xue    <![CDATA[JMX interface to bindings.
11342*dc5640d1SHerbert Xue
11343*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
11344*dc5640d1SHerbert Xue    </doc>
11345*dc5640d1SHerbert Xue  </interface>
11346*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
11347*dc5640d1SHerbert Xue  <!-- start class com.google.inject.tools.jmx.Manager -->
11348*dc5640d1SHerbert Xue  <class name="Manager" extends="java.lang.Object"
11349*dc5640d1SHerbert Xue    abstract="false"
11350*dc5640d1SHerbert Xue    static="false" final="false" visibility="public"
11351*dc5640d1SHerbert Xue    deprecated="not deprecated">
11352*dc5640d1SHerbert Xue    <constructor name="Manager"
11353*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11354*dc5640d1SHerbert Xue      deprecated="not deprecated">
11355*dc5640d1SHerbert Xue    </constructor>
11356*dc5640d1SHerbert Xue    <method name="manage"
11357*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11358*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11359*dc5640d1SHerbert Xue      deprecated="not deprecated">
11360*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
11361*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
11362*dc5640d1SHerbert Xue      <doc>
11363*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
11364*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
11365*dc5640d1SHerbert Xue      </doc>
11366*dc5640d1SHerbert Xue    </method>
11367*dc5640d1SHerbert Xue    <method name="manage"
11368*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11369*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11370*dc5640d1SHerbert Xue      deprecated="not deprecated">
11371*dc5640d1SHerbert Xue      <param name="server" type="javax.management.MBeanServer"/>
11372*dc5640d1SHerbert Xue      <param name="domain" type="java.lang.String"/>
11373*dc5640d1SHerbert Xue      <param name="injector" type="com.google.inject.Injector"/>
11374*dc5640d1SHerbert Xue      <doc>
11375*dc5640d1SHerbert Xue      <![CDATA[Registers all the bindings of an Injector with the given MBean server.
11376*dc5640d1SHerbert Xue Consider using the name of your root {@link Module} class as the domain.]]>
11377*dc5640d1SHerbert Xue      </doc>
11378*dc5640d1SHerbert Xue    </method>
11379*dc5640d1SHerbert Xue    <method name="main"
11380*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11381*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11382*dc5640d1SHerbert Xue      deprecated="not deprecated">
11383*dc5640d1SHerbert Xue      <param name="args" type="java.lang.String[]"/>
11384*dc5640d1SHerbert Xue      <exception name="Exception" type="java.lang.Exception"/>
11385*dc5640d1SHerbert Xue      <doc>
11386*dc5640d1SHerbert Xue      <![CDATA[Run with no arguments for usage instructions.]]>
11387*dc5640d1SHerbert Xue      </doc>
11388*dc5640d1SHerbert Xue    </method>
11389*dc5640d1SHerbert Xue    <doc>
11390*dc5640d1SHerbert Xue    <![CDATA[Provides a JMX interface to Guice.
11391*dc5640d1SHerbert Xue
11392*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)]]>
11393*dc5640d1SHerbert Xue    </doc>
11394*dc5640d1SHerbert Xue  </class>
11395*dc5640d1SHerbert Xue  <!-- end class com.google.inject.tools.jmx.Manager -->
11396*dc5640d1SHerbert Xue</package>
11397*dc5640d1SHerbert Xue<package name="com.google.inject.util">
11398*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Modules -->
11399*dc5640d1SHerbert Xue  <class name="Modules" extends="java.lang.Object"
11400*dc5640d1SHerbert Xue    abstract="false"
11401*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11402*dc5640d1SHerbert Xue    deprecated="not deprecated">
11403*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11404*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11405*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11406*dc5640d1SHerbert Xue      deprecated="not deprecated">
11407*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
11408*dc5640d1SHerbert Xue      <doc>
11409*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11410*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
11411*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
11412*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
11413*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
11414*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
11415*dc5640d1SHerbert Xue <pre>
11416*dc5640d1SHerbert Xue Module functionalTestModule
11417*dc5640d1SHerbert Xue     = Modules.override(new ProductionModule()).with(new TestModule());
11418*dc5640d1SHerbert Xue </pre>
11419*dc5640d1SHerbert Xue
11420*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
11421*dc5640d1SHerbert Xue
11422*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
11423*dc5640d1SHerbert Xue      </doc>
11424*dc5640d1SHerbert Xue    </method>
11425*dc5640d1SHerbert Xue    <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
11426*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11427*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11428*dc5640d1SHerbert Xue      deprecated="not deprecated">
11429*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11430*dc5640d1SHerbert Xue      <doc>
11431*dc5640d1SHerbert Xue      <![CDATA[Returns a builder that creates a module that overlays override modules over the given
11432*dc5640d1SHerbert Xue modules. If a key is bound in both sets of modules, only the binding from the override modules
11433*dc5640d1SHerbert Xue is kept. If a single {@link PrivateModule} is supplied or all elements are from
11434*dc5640d1SHerbert Xue a single {@link PrivateBinder}, then this will overwrite the private bindings.
11435*dc5640d1SHerbert Xue Otherwise, private bindings will not be overwritten unless they are exposed.
11436*dc5640d1SHerbert Xue This can be used to replace the bindings of a production module with test bindings:
11437*dc5640d1SHerbert Xue <pre>
11438*dc5640d1SHerbert Xue Module functionalTestModule
11439*dc5640d1SHerbert Xue     = Modules.override(getProductionModules()).with(getTestModules());
11440*dc5640d1SHerbert Xue </pre>
11441*dc5640d1SHerbert Xue
11442*dc5640d1SHerbert Xue <p>Prefer to write smaller modules that can be reused and tested without overrides.
11443*dc5640d1SHerbert Xue
11444*dc5640d1SHerbert Xue @param modules the modules whose bindings are open to be overridden]]>
11445*dc5640d1SHerbert Xue      </doc>
11446*dc5640d1SHerbert Xue    </method>
11447*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
11448*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11449*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11450*dc5640d1SHerbert Xue      deprecated="not deprecated">
11451*dc5640d1SHerbert Xue      <param name="modules" type="com.google.inject.Module[]"/>
11452*dc5640d1SHerbert Xue      <doc>
11453*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11454*dc5640d1SHerbert Xue      </doc>
11455*dc5640d1SHerbert Xue    </method>
11456*dc5640d1SHerbert Xue    <method name="combine" return="com.google.inject.Module"
11457*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11458*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11459*dc5640d1SHerbert Xue      deprecated="not deprecated">
11460*dc5640d1SHerbert Xue      <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11461*dc5640d1SHerbert Xue      <doc>
11462*dc5640d1SHerbert Xue      <![CDATA[Returns a new module that installs all of {@code modules}.]]>
11463*dc5640d1SHerbert Xue      </doc>
11464*dc5640d1SHerbert Xue    </method>
11465*dc5640d1SHerbert Xue    <field name="EMPTY_MODULE" type="com.google.inject.Module"
11466*dc5640d1SHerbert Xue      transient="false" volatile="false"
11467*dc5640d1SHerbert Xue      static="true" final="true" visibility="public"
11468*dc5640d1SHerbert Xue      deprecated="not deprecated">
11469*dc5640d1SHerbert Xue    </field>
11470*dc5640d1SHerbert Xue    <doc>
11471*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
11472*dc5640d1SHerbert Xue
11473*dc5640d1SHerbert Xue @author [email protected] (Jesse Wilson)
11474*dc5640d1SHerbert Xue @since 2.0]]>
11475*dc5640d1SHerbert Xue    </doc>
11476*dc5640d1SHerbert Xue  </class>
11477*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Modules -->
11478*dc5640d1SHerbert Xue  <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11479*dc5640d1SHerbert Xue  <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
11480*dc5640d1SHerbert Xue    static="true" final="false" visibility="public"
11481*dc5640d1SHerbert Xue    deprecated="not deprecated">
11482*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
11483*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11484*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11485*dc5640d1SHerbert Xue      deprecated="not deprecated">
11486*dc5640d1SHerbert Xue      <param name="overrides" type="com.google.inject.Module[]"/>
11487*dc5640d1SHerbert Xue      <doc>
11488*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11489*dc5640d1SHerbert Xue      </doc>
11490*dc5640d1SHerbert Xue    </method>
11491*dc5640d1SHerbert Xue    <method name="with" return="com.google.inject.Module"
11492*dc5640d1SHerbert Xue      abstract="true" native="false" synchronized="false"
11493*dc5640d1SHerbert Xue      static="false" final="false" visibility="public"
11494*dc5640d1SHerbert Xue      deprecated="not deprecated">
11495*dc5640d1SHerbert Xue      <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
11496*dc5640d1SHerbert Xue      <doc>
11497*dc5640d1SHerbert Xue      <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11498*dc5640d1SHerbert Xue      </doc>
11499*dc5640d1SHerbert Xue    </method>
11500*dc5640d1SHerbert Xue    <doc>
11501*dc5640d1SHerbert Xue    <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
11502*dc5640d1SHerbert Xue    </doc>
11503*dc5640d1SHerbert Xue  </interface>
11504*dc5640d1SHerbert Xue  <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
11505*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Providers -->
11506*dc5640d1SHerbert Xue  <class name="Providers" extends="java.lang.Object"
11507*dc5640d1SHerbert Xue    abstract="false"
11508*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11509*dc5640d1SHerbert Xue    deprecated="not deprecated">
11510*dc5640d1SHerbert Xue    <method name="of" return="com.google.inject.Provider&lt;T&gt;"
11511*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11512*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11513*dc5640d1SHerbert Xue      deprecated="not deprecated">
11514*dc5640d1SHerbert Xue      <param name="instance" type="T"/>
11515*dc5640d1SHerbert Xue      <doc>
11516*dc5640d1SHerbert Xue      <![CDATA[Returns a provider which always provides {@code instance}.  This should not
11517*dc5640d1SHerbert Xue be necessary to use in your application, but is helpful for several types
11518*dc5640d1SHerbert Xue of unit tests.
11519*dc5640d1SHerbert Xue
11520*dc5640d1SHerbert Xue @param instance the instance that should always be provided.  This is also
11521*dc5640d1SHerbert Xue     permitted to be null, to enable aggressive testing, although in real
11522*dc5640d1SHerbert Xue     life a Guice-supplied Provider will never return null.]]>
11523*dc5640d1SHerbert Xue      </doc>
11524*dc5640d1SHerbert Xue    </method>
11525*dc5640d1SHerbert Xue    <method name="guicify" return="com.google.inject.Provider&lt;T&gt;"
11526*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11527*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11528*dc5640d1SHerbert Xue      deprecated="not deprecated">
11529*dc5640d1SHerbert Xue      <param name="provider" type="javax.inject.Provider&lt;T&gt;"/>
11530*dc5640d1SHerbert Xue      <doc>
11531*dc5640d1SHerbert Xue      <![CDATA[Returns a Guice-friendly {@code com.google.inject.Provider} for the given
11532*dc5640d1SHerbert Xue JSR-330 {@code javax.inject.Provider}. The converse method is unnecessary,
11533*dc5640d1SHerbert Xue since Guice providers directly implement the JSR-330 interface.
11534*dc5640d1SHerbert Xue
11535*dc5640d1SHerbert Xue @since 3.0]]>
11536*dc5640d1SHerbert Xue      </doc>
11537*dc5640d1SHerbert Xue    </method>
11538*dc5640d1SHerbert Xue    <doc>
11539*dc5640d1SHerbert Xue    <![CDATA[Static utility methods for creating and working with instances of
11540*dc5640d1SHerbert Xue {@link Provider}.
11541*dc5640d1SHerbert Xue
11542*dc5640d1SHerbert Xue @author Kevin Bourrillion ([email protected])
11543*dc5640d1SHerbert Xue @since 2.0]]>
11544*dc5640d1SHerbert Xue    </doc>
11545*dc5640d1SHerbert Xue  </class>
11546*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Providers -->
11547*dc5640d1SHerbert Xue  <!-- start class com.google.inject.util.Types -->
11548*dc5640d1SHerbert Xue  <class name="Types" extends="java.lang.Object"
11549*dc5640d1SHerbert Xue    abstract="false"
11550*dc5640d1SHerbert Xue    static="false" final="true" visibility="public"
11551*dc5640d1SHerbert Xue    deprecated="not deprecated">
11552*dc5640d1SHerbert Xue    <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
11553*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11554*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11555*dc5640d1SHerbert Xue      deprecated="not deprecated">
11556*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
11557*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11558*dc5640d1SHerbert Xue      <doc>
11559*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11560*dc5640d1SHerbert Xue {@code rawType}. The returned type does not have an owner type.
11561*dc5640d1SHerbert Xue
11562*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11563*dc5640d1SHerbert Xue      </doc>
11564*dc5640d1SHerbert Xue    </method>
11565*dc5640d1SHerbert Xue    <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
11566*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11567*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11568*dc5640d1SHerbert Xue      deprecated="not deprecated">
11569*dc5640d1SHerbert Xue      <param name="ownerType" type="java.lang.reflect.Type"/>
11570*dc5640d1SHerbert Xue      <param name="rawType" type="java.lang.reflect.Type"/>
11571*dc5640d1SHerbert Xue      <param name="typeArguments" type="java.lang.reflect.Type[]"/>
11572*dc5640d1SHerbert Xue      <doc>
11573*dc5640d1SHerbert Xue      <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
11574*dc5640d1SHerbert Xue {@code rawType} and enclosed by {@code ownerType}.
11575*dc5640d1SHerbert Xue
11576*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11577*dc5640d1SHerbert Xue      </doc>
11578*dc5640d1SHerbert Xue    </method>
11579*dc5640d1SHerbert Xue    <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
11580*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11581*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11582*dc5640d1SHerbert Xue      deprecated="not deprecated">
11583*dc5640d1SHerbert Xue      <param name="componentType" type="java.lang.reflect.Type"/>
11584*dc5640d1SHerbert Xue      <doc>
11585*dc5640d1SHerbert Xue      <![CDATA[Returns an array type whose elements are all instances of
11586*dc5640d1SHerbert Xue {@code componentType}.
11587*dc5640d1SHerbert Xue
11588*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} generic array type.]]>
11589*dc5640d1SHerbert Xue      </doc>
11590*dc5640d1SHerbert Xue    </method>
11591*dc5640d1SHerbert Xue    <method name="subtypeOf" return="java.lang.reflect.WildcardType"
11592*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11593*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11594*dc5640d1SHerbert Xue      deprecated="not deprecated">
11595*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
11596*dc5640d1SHerbert Xue      <doc>
11597*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
11598*dc5640d1SHerbert Xue For example, if {@code bound} is {@code CharSequence.class}, this returns
11599*dc5640d1SHerbert Xue {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
11600*dc5640d1SHerbert Xue this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
11601*dc5640d1SHerbert Xue      </doc>
11602*dc5640d1SHerbert Xue    </method>
11603*dc5640d1SHerbert Xue    <method name="supertypeOf" return="java.lang.reflect.WildcardType"
11604*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11605*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11606*dc5640d1SHerbert Xue      deprecated="not deprecated">
11607*dc5640d1SHerbert Xue      <param name="bound" type="java.lang.reflect.Type"/>
11608*dc5640d1SHerbert Xue      <doc>
11609*dc5640d1SHerbert Xue      <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
11610*dc5640d1SHerbert Xue example, if {@code bound} is {@code String.class}, this returns {@code ?
11611*dc5640d1SHerbert Xue super String}.]]>
11612*dc5640d1SHerbert Xue      </doc>
11613*dc5640d1SHerbert Xue    </method>
11614*dc5640d1SHerbert Xue    <method name="listOf" return="java.lang.reflect.ParameterizedType"
11615*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11616*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11617*dc5640d1SHerbert Xue      deprecated="not deprecated">
11618*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
11619*dc5640d1SHerbert Xue      <doc>
11620*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link List} whose elements are of type
11621*dc5640d1SHerbert Xue {@code elementType}.
11622*dc5640d1SHerbert Xue
11623*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11624*dc5640d1SHerbert Xue      </doc>
11625*dc5640d1SHerbert Xue    </method>
11626*dc5640d1SHerbert Xue    <method name="setOf" return="java.lang.reflect.ParameterizedType"
11627*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11628*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11629*dc5640d1SHerbert Xue      deprecated="not deprecated">
11630*dc5640d1SHerbert Xue      <param name="elementType" type="java.lang.reflect.Type"/>
11631*dc5640d1SHerbert Xue      <doc>
11632*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
11633*dc5640d1SHerbert Xue {@code elementType}.
11634*dc5640d1SHerbert Xue
11635*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11636*dc5640d1SHerbert Xue      </doc>
11637*dc5640d1SHerbert Xue    </method>
11638*dc5640d1SHerbert Xue    <method name="mapOf" return="java.lang.reflect.ParameterizedType"
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="keyType" type="java.lang.reflect.Type"/>
11643*dc5640d1SHerbert Xue      <param name="valueType" type="java.lang.reflect.Type"/>
11644*dc5640d1SHerbert Xue      <doc>
11645*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
11646*dc5640d1SHerbert Xue {@code keyType} and whose values are of type {@code valueType}.
11647*dc5640d1SHerbert Xue
11648*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11649*dc5640d1SHerbert Xue      </doc>
11650*dc5640d1SHerbert Xue    </method>
11651*dc5640d1SHerbert Xue    <method name="providerOf" return="java.lang.reflect.ParameterizedType"
11652*dc5640d1SHerbert Xue      abstract="false" native="false" synchronized="false"
11653*dc5640d1SHerbert Xue      static="true" final="false" visibility="public"
11654*dc5640d1SHerbert Xue      deprecated="not deprecated">
11655*dc5640d1SHerbert Xue      <param name="providedType" type="java.lang.reflect.Type"/>
11656*dc5640d1SHerbert Xue      <doc>
11657*dc5640d1SHerbert Xue      <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
11658*dc5640d1SHerbert Xue {@code elementType}.
11659*dc5640d1SHerbert Xue
11660*dc5640d1SHerbert Xue @return a {@link java.io.Serializable serializable} parameterized type.]]>
11661*dc5640d1SHerbert Xue      </doc>
11662*dc5640d1SHerbert Xue    </method>
11663*dc5640d1SHerbert Xue    <doc>
11664*dc5640d1SHerbert Xue    <![CDATA[Static methods for working with types.
11665*dc5640d1SHerbert Xue
11666*dc5640d1SHerbert Xue @author [email protected] (Bob Lee)
11667*dc5640d1SHerbert Xue @since 2.0]]>
11668*dc5640d1SHerbert Xue    </doc>
11669*dc5640d1SHerbert Xue  </class>
11670*dc5640d1SHerbert Xue  <!-- end class com.google.inject.util.Types -->
11671*dc5640d1SHerbert Xue</package>
11672*dc5640d1SHerbert Xue
11673*dc5640d1SHerbert Xue</api>
11674