Home | History | Annotate | Download | only in latest-api-diffs
      1 <?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
      2 <!-- Generated by the JDiff Javadoc doclet -->
      3 <!-- (http://www.jdiff.org) -->
      4 <!-- on Tue May 19 17:01:55 PDT 2009 -->
      5 
      6 <api
      7   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
      8   xsi:noNamespaceSchemaLocation='api.xsd'
      9   name="2.0"
     10   jdversion="1.1.1">
     11 
     12 <!--  Command line arguments =  -doclet jdiff.JDiff -docletpath /Applications/bin/jdiff-1.1.1/jdiff.jar:/Applications/bin/jdiff-1.1.1/xerces.jar -d /Users/jessewilson/Guice/guice-everything/api-diffs -classpath /usr/share/ant/lib/ant-launcher.jar:/usr/share/ant/lib/ant-jai.jar:/usr/share/ant/lib/ant-jmf.jar:/usr/share/ant/lib/ant-junit.jar:/usr/share/ant/lib/ant-nodeps.jar:/usr/share/ant/lib/ant-swing.jar:/usr/share/ant/lib/ant-testutil.jar:/usr/share/ant/lib/ant-trax.jar:/usr/share/ant/lib/ant.jar:/usr/share/ant/lib/junit.jar:/usr/share/ant/lib/xercesImpl.jar:/usr/share/ant/lib/xml-apis.jar -sourcepath /Users/jessewilson/Guice/google-guice/src:/Users/jessewilson/Guice/google-guice/extensions/jmx/src:/Users/jessewilson/Guice/google-guice/extensions/jndi/src:/Users/jessewilson/Guice/google-guice/extensions/assistedinject/src:/Users/jessewilson/Guice/google-guice/extensions/multibindings/src:/Users/jessewilson/Guice/google-guice/extensions/throwingproviders/src:/Users/jessewilson/Guice/google-guice/servlet/src:/Users/jessewilson/Guice/google-guice/spring/src:/Users/jessewilson/Guice/google-guice/struts2/plugin/src -apiname 2.0 -baseURI http://www.w3.org -apidir /Users/jessewilson/Guice/guice-everything/api-diffs -source 1.5 -->
     13 <package name="com.google.inject">
     14   <!-- start class com.google.inject.AbstractModule -->
     15   <class name="AbstractModule" extends="java.lang.Object"
     16     abstract="true"
     17     static="false" final="false" visibility="public"
     18     deprecated="not deprecated">
     19     <implements name="com.google.inject.Module"/>
     20     <constructor name="AbstractModule"
     21       static="false" final="false" visibility="public"
     22       deprecated="not deprecated">
     23     </constructor>
     24     <method name="configure"
     25       abstract="false" native="false" synchronized="true"
     26       static="false" final="true" visibility="public"
     27       deprecated="not deprecated">
     28       <param name="builder" type="com.google.inject.Binder"/>
     29     </method>
     30     <method name="configure"
     31       abstract="true" native="false" synchronized="false"
     32       static="false" final="false" visibility="protected"
     33       deprecated="not deprecated">
     34       <doc>
     35       <![CDATA[Configures a {@link Binder} via the exposed methods.]]>
     36       </doc>
     37     </method>
     38     <method name="binder" return="com.google.inject.Binder"
     39       abstract="false" native="false" synchronized="false"
     40       static="false" final="false" visibility="protected"
     41       deprecated="not deprecated">
     42       <doc>
     43       <![CDATA[Gets direct access to the underlying {@code Binder}.]]>
     44       </doc>
     45     </method>
     46     <method name="bindScope"
     47       abstract="false" native="false" synchronized="false"
     48       static="false" final="false" visibility="protected"
     49       deprecated="not deprecated">
     50       <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
     51       <param name="scope" type="com.google.inject.Scope"/>
     52       <doc>
     53       <![CDATA[@see Binder#bindScope(Class, Scope)]]>
     54       </doc>
     55     </method>
     56     <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
     57       abstract="false" native="false" synchronized="false"
     58       static="false" final="false" visibility="protected"
     59       deprecated="not deprecated">
     60       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
     61       <doc>
     62       <![CDATA[@see Binder#bind(Key)]]>
     63       </doc>
     64     </method>
     65     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
     66       abstract="false" native="false" synchronized="false"
     67       static="false" final="false" visibility="protected"
     68       deprecated="not deprecated">
     69       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
     70       <doc>
     71       <![CDATA[@see Binder#bind(TypeLiteral)]]>
     72       </doc>
     73     </method>
     74     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
     75       abstract="false" native="false" synchronized="false"
     76       static="false" final="false" visibility="protected"
     77       deprecated="not deprecated">
     78       <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
     79       <doc>
     80       <![CDATA[@see Binder#bind(Class)]]>
     81       </doc>
     82     </method>
     83     <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
     84       abstract="false" native="false" synchronized="false"
     85       static="false" final="false" visibility="protected"
     86       deprecated="not deprecated">
     87       <doc>
     88       <![CDATA[@see Binder#bindConstant()]]>
     89       </doc>
     90     </method>
     91     <method name="install"
     92       abstract="false" native="false" synchronized="false"
     93       static="false" final="false" visibility="protected"
     94       deprecated="not deprecated">
     95       <param name="module" type="com.google.inject.Module"/>
     96       <doc>
     97       <![CDATA[@see Binder#install(Module)]]>
     98       </doc>
     99     </method>
    100     <method name="addError"
    101       abstract="false" native="false" synchronized="false"
    102       static="false" final="false" visibility="protected"
    103       deprecated="not deprecated">
    104       <param name="message" type="java.lang.String"/>
    105       <param name="arguments" type="java.lang.Object[]"/>
    106       <doc>
    107       <![CDATA[@see Binder#addError(String, Object[])]]>
    108       </doc>
    109     </method>
    110     <method name="addError"
    111       abstract="false" native="false" synchronized="false"
    112       static="false" final="false" visibility="protected"
    113       deprecated="not deprecated">
    114       <param name="t" type="java.lang.Throwable"/>
    115       <doc>
    116       <![CDATA[@see Binder#addError(Throwable)]]>
    117       </doc>
    118     </method>
    119     <method name="addError"
    120       abstract="false" native="false" synchronized="false"
    121       static="false" final="false" visibility="protected"
    122       deprecated="not deprecated">
    123       <param name="message" type="com.google.inject.spi.Message"/>
    124       <doc>
    125       <![CDATA[@see Binder#addError(Message)
    126  @since 2.0]]>
    127       </doc>
    128     </method>
    129     <method name="requestInjection"
    130       abstract="false" native="false" synchronized="false"
    131       static="false" final="false" visibility="protected"
    132       deprecated="not deprecated">
    133       <param name="instance" type="java.lang.Object"/>
    134       <doc>
    135       <![CDATA[@see Binder#requestInjection(Object)
    136  @since 2.0]]>
    137       </doc>
    138     </method>
    139     <method name="requestStaticInjection"
    140       abstract="false" native="false" synchronized="false"
    141       static="false" final="false" visibility="protected"
    142       deprecated="not deprecated">
    143       <param name="types" type="java.lang.Class[]"/>
    144       <doc>
    145       <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
    146       </doc>
    147     </method>
    148     <method name="bindInterceptor"
    149       abstract="false" native="false" synchronized="false"
    150       static="false" final="false" visibility="protected"
    151       deprecated="not deprecated">
    152       <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
    153       <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
    154       <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
    155       <doc>
    156       <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher,
    157   com.google.inject.matcher.Matcher,
    158   org.aopalliance.intercept.MethodInterceptor[])]]>
    159       </doc>
    160     </method>
    161     <method name="requireBinding"
    162       abstract="false" native="false" synchronized="false"
    163       static="false" final="false" visibility="protected"
    164       deprecated="not deprecated">
    165       <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
    166       <doc>
    167       <![CDATA[Adds a dependency from this module to {@code key}. When the injector is
    168  created, Guice will report an error if {@code key} cannot be injected.
    169  Note that this requirement may be satisfied by implicit binding, such as
    170  a public no-arguments constructor.
    171 
    172  @since 2.0]]>
    173       </doc>
    174     </method>
    175     <method name="requireBinding"
    176       abstract="false" native="false" synchronized="false"
    177       static="false" final="false" visibility="protected"
    178       deprecated="not deprecated">
    179       <param name="type" type="java.lang.Class&lt;?&gt;"/>
    180       <doc>
    181       <![CDATA[Adds a dependency from this module to {@code type}. When the injector is
    182  created, Guice will report an error if {@code type} cannot be injected.
    183  Note that this requirement may be satisfied by implicit binding, such as
    184  a public no-arguments constructor.
    185 
    186  @since 2.0]]>
    187       </doc>
    188     </method>
    189     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
    190       abstract="false" native="false" synchronized="false"
    191       static="false" final="false" visibility="protected"
    192       deprecated="not deprecated">
    193       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
    194       <doc>
    195       <![CDATA[@see Binder#getProvider(Key)
    196  @since 2.0]]>
    197       </doc>
    198     </method>
    199     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
    200       abstract="false" native="false" synchronized="false"
    201       static="false" final="false" visibility="protected"
    202       deprecated="not deprecated">
    203       <param name="type" type="java.lang.Class&lt;T&gt;"/>
    204       <doc>
    205       <![CDATA[@see Binder#getProvider(Class)
    206  @since 2.0]]>
    207       </doc>
    208     </method>
    209     <method name="convertToTypes"
    210       abstract="false" native="false" synchronized="false"
    211       static="false" final="false" visibility="protected"
    212       deprecated="not deprecated">
    213       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
    214       <param name="converter" type="com.google.inject.spi.TypeConverter"/>
    215       <doc>
    216       <![CDATA[@see Binder#convertToTypes
    217  @since 2.0]]>
    218       </doc>
    219     </method>
    220     <method name="currentStage" return="com.google.inject.Stage"
    221       abstract="false" native="false" synchronized="false"
    222       static="false" final="false" visibility="protected"
    223       deprecated="not deprecated">
    224       <doc>
    225       <![CDATA[@see Binder#currentStage() 
    226  @since 2.0]]>
    227       </doc>
    228     </method>
    229     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
    230       abstract="false" native="false" synchronized="false"
    231       static="false" final="false" visibility="protected"
    232       deprecated="not deprecated">
    233       <param name="type" type="java.lang.Class&lt;T&gt;"/>
    234       <doc>
    235       <![CDATA[@see Binder#getMembersInjector(Class)
    236  @since 2.0]]>
    237       </doc>
    238     </method>
    239     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
    240       abstract="false" native="false" synchronized="false"
    241       static="false" final="false" visibility="protected"
    242       deprecated="not deprecated">
    243       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
    244       <doc>
    245       <![CDATA[@see Binder#getMembersInjector(TypeLiteral)
    246  @since 2.0]]>
    247       </doc>
    248     </method>
    249     <method name="bindListener"
    250       abstract="false" native="false" synchronized="false"
    251       static="false" final="false" visibility="protected"
    252       deprecated="not deprecated">
    253       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
    254       <param name="listener" type="com.google.inject.spi.TypeListener"/>
    255       <doc>
    256       <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher,
    257   com.google.inject.spi.TypeListener)
    258  @since 2.0]]>
    259       </doc>
    260     </method>
    261     <doc>
    262     <![CDATA[A support class for {@link Module}s which reduces repetition and results in
    263  a more readable configuration. Simply extend this class, implement {@link
    264  #configure()}, and call the inherited methods which mirror those found in
    265  {@link Binder}. For example:
    266 
    267  <pre>
    268  public class MyModule extends AbstractModule {
    269    protected void configure() {
    270      bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
    271      bind(CreditCardPaymentService.class);
    272      bind(PaymentService.class).to(CreditCardPaymentService.class);
    273      bindConstant().annotatedWith(Names.named("port")).to(8080);
    274    }
    275  }
    276  </pre>
    277 
    278  @author crazybob (a] google.com (Bob Lee)]]>
    279     </doc>
    280   </class>
    281   <!-- end class com.google.inject.AbstractModule -->
    282   <!-- start interface com.google.inject.Binder -->
    283   <interface name="Binder"    abstract="true"
    284     static="false" final="false" visibility="public"
    285     deprecated="not deprecated">
    286     <method name="bindInterceptor"
    287       abstract="false" native="false" synchronized="false"
    288       static="false" final="false" visibility="public"
    289       deprecated="not deprecated">
    290       <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
    291       <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
    292       <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
    293       <doc>
    294       <![CDATA[Binds method interceptor[s] to methods matched by class and method matchers. A method is
    295  eligible for interception if:
    296 
    297  <ul>
    298   <li>Guice created the instance the method is on</li>
    299   <li>Neither the enclosing type nor the method is final</li>
    300   <li>And the method is package-private, protected, or public</li>
    301  </ul>
    302 
    303  @param classMatcher matches classes the interceptor should apply to. For
    304      example: {@code only(Runnable.class)}.
    305  @param methodMatcher matches methods the interceptor should apply to. For
    306      example: {@code annotatedWith(Transactional.class)}.
    307  @param interceptors to bind]]>
    308       </doc>
    309     </method>
    310     <method name="bindScope"
    311       abstract="false" native="false" synchronized="false"
    312       static="false" final="false" visibility="public"
    313       deprecated="not deprecated">
    314       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
    315       <param name="scope" type="com.google.inject.Scope"/>
    316       <doc>
    317       <![CDATA[Binds a scope to an annotation.]]>
    318       </doc>
    319     </method>
    320     <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
    321       abstract="false" native="false" synchronized="false"
    322       static="false" final="false" visibility="public"
    323       deprecated="not deprecated">
    324       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
    325       <doc>
    326       <![CDATA[See the EDSL examples at {@link Binder}.]]>
    327       </doc>
    328     </method>
    329     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
    330       abstract="false" native="false" synchronized="false"
    331       static="false" final="false" visibility="public"
    332       deprecated="not deprecated">
    333       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
    334       <doc>
    335       <![CDATA[See the EDSL examples at {@link Binder}.]]>
    336       </doc>
    337     </method>
    338     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
    339       abstract="false" native="false" synchronized="false"
    340       static="false" final="false" visibility="public"
    341       deprecated="not deprecated">
    342       <param name="type" type="java.lang.Class&lt;T&gt;"/>
    343       <doc>
    344       <![CDATA[See the EDSL examples at {@link Binder}.]]>
    345       </doc>
    346     </method>
    347     <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
    348       abstract="false" native="false" synchronized="false"
    349       static="false" final="false" visibility="public"
    350       deprecated="not deprecated">
    351       <doc>
    352       <![CDATA[See the EDSL examples at {@link Binder}.]]>
    353       </doc>
    354     </method>
    355     <method name="requestInjection"
    356       abstract="false" native="false" synchronized="false"
    357       static="false" final="false" visibility="public"
    358       deprecated="not deprecated">
    359       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
    360       <param name="instance" type="T"/>
    361       <doc>
    362       <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
    363  and methods of the given object.
    364 
    365  @param type of instance
    366  @param instance for which members will be injected
    367  @since 2.0]]>
    368       </doc>
    369     </method>
    370     <method name="requestInjection"
    371       abstract="false" native="false" synchronized="false"
    372       static="false" final="false" visibility="public"
    373       deprecated="not deprecated">
    374       <param name="instance" type="java.lang.Object"/>
    375       <doc>
    376       <![CDATA[Upon successful creation, the {@link Injector} will inject instance fields
    377  and methods of the given object.
    378 
    379  @param instance for which members will be injected
    380  @since 2.0]]>
    381       </doc>
    382     </method>
    383     <method name="requestStaticInjection"
    384       abstract="false" native="false" synchronized="false"
    385       static="false" final="false" visibility="public"
    386       deprecated="not deprecated">
    387       <param name="types" type="java.lang.Class[]"/>
    388       <doc>
    389       <![CDATA[Upon successful creation, the {@link Injector} will inject static fields
    390  and methods in the given classes.
    391 
    392  @param types for which static members will be injected]]>
    393       </doc>
    394     </method>
    395     <method name="install"
    396       abstract="false" native="false" synchronized="false"
    397       static="false" final="false" visibility="public"
    398       deprecated="not deprecated">
    399       <param name="module" type="com.google.inject.Module"/>
    400       <doc>
    401       <![CDATA[Uses the given module to configure more bindings.]]>
    402       </doc>
    403     </method>
    404     <method name="currentStage" return="com.google.inject.Stage"
    405       abstract="false" native="false" synchronized="false"
    406       static="false" final="false" visibility="public"
    407       deprecated="not deprecated">
    408       <doc>
    409       <![CDATA[Gets the current stage.]]>
    410       </doc>
    411     </method>
    412     <method name="addError"
    413       abstract="false" native="false" synchronized="false"
    414       static="false" final="false" visibility="public"
    415       deprecated="not deprecated">
    416       <param name="message" type="java.lang.String"/>
    417       <param name="arguments" type="java.lang.Object[]"/>
    418       <doc>
    419       <![CDATA[Records an error message which will be presented to the user at a later
    420  time. Unlike throwing an exception, this enable us to continue
    421  configuring the Injector and discover more errors. Uses {@link
    422  String#format(String, Object[])} to insert the arguments into the
    423  message.]]>
    424       </doc>
    425     </method>
    426     <method name="addError"
    427       abstract="false" native="false" synchronized="false"
    428       static="false" final="false" visibility="public"
    429       deprecated="not deprecated">
    430       <param name="t" type="java.lang.Throwable"/>
    431       <doc>
    432       <![CDATA[Records an exception, the full details of which will be logged, and the
    433  message of which will be presented to the user at a later
    434  time. If your Module calls something that you worry may fail, you should
    435  catch the exception and pass it into this.]]>
    436       </doc>
    437     </method>
    438     <method name="addError"
    439       abstract="false" native="false" synchronized="false"
    440       static="false" final="false" visibility="public"
    441       deprecated="not deprecated">
    442       <param name="message" type="com.google.inject.spi.Message"/>
    443       <doc>
    444       <![CDATA[Records an error message to be presented to the user at a later time.
    445 
    446  @since 2.0]]>
    447       </doc>
    448     </method>
    449     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
    450       abstract="false" native="false" synchronized="false"
    451       static="false" final="false" visibility="public"
    452       deprecated="not deprecated">
    453       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
    454       <doc>
    455       <![CDATA[Returns the provider used to obtain instances for the given injection key.
    456  The returned will not be valid until the {@link Injector} has been
    457  created. The provider will throw an {@code IllegalStateException} if you
    458  try to use it beforehand.
    459 
    460  @since 2.0]]>
    461       </doc>
    462     </method>
    463     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
    464       abstract="false" native="false" synchronized="false"
    465       static="false" final="false" visibility="public"
    466       deprecated="not deprecated">
    467       <param name="type" type="java.lang.Class&lt;T&gt;"/>
    468       <doc>
    469       <![CDATA[Returns the provider used to obtain instances for the given injection type.
    470  The returned provider will not be valid until the {@link Injector} has been
    471  created. The provider will throw an {@code IllegalStateException} if you
    472  try to use it beforehand.
    473 
    474  @since 2.0]]>
    475       </doc>
    476     </method>
    477     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
    478       abstract="false" native="false" synchronized="false"
    479       static="false" final="false" visibility="public"
    480       deprecated="not deprecated">
    481       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
    482       <doc>
    483       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
    484  of the given type {@code T}. The returned members injector will not be valid until the main
    485  {@link Injector} has been created. The members injector will throw an {@code
    486  IllegalStateException} if you try to use it beforehand.
    487 
    488  @param typeLiteral type to get members injector for
    489  @since 2.0]]>
    490       </doc>
    491     </method>
    492     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
    493       abstract="false" native="false" synchronized="false"
    494       static="false" final="false" visibility="public"
    495       deprecated="not deprecated">
    496       <param name="type" type="java.lang.Class&lt;T&gt;"/>
    497       <doc>
    498       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
    499  of the given type {@code T}. The returned members injector will not be valid until the main
    500  {@link Injector} has been created. The members injector will throw an {@code
    501  IllegalStateException} if you try to use it beforehand.
    502 
    503  @param type type to get members injector for
    504  @since 2.0]]>
    505       </doc>
    506     </method>
    507     <method name="convertToTypes"
    508       abstract="false" native="false" synchronized="false"
    509       static="false" final="false" visibility="public"
    510       deprecated="not deprecated">
    511       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
    512       <param name="converter" type="com.google.inject.spi.TypeConverter"/>
    513       <doc>
    514       <![CDATA[Binds a type converter. The injector will use the given converter to
    515  convert string constants to matching types as needed.
    516 
    517  @param typeMatcher matches types the converter can handle
    518  @param converter converts values
    519  @since 2.0]]>
    520       </doc>
    521     </method>
    522     <method name="bindListener"
    523       abstract="false" native="false" synchronized="false"
    524       static="false" final="false" visibility="public"
    525       deprecated="not deprecated">
    526       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
    527       <param name="listener" type="com.google.inject.spi.TypeListener"/>
    528       <doc>
    529       <![CDATA[Registers a listener for injectable types. Guice will notify the listener when it encounters
    530  injectable types matched by the given type matcher.
    531 
    532  @param typeMatcher that matches injectable types the listener should be notified of
    533  @param listener for injectable types matched by typeMatcher
    534  @since 2.0]]>
    535       </doc>
    536     </method>
    537     <method name="withSource" return="com.google.inject.Binder"
    538       abstract="false" native="false" synchronized="false"
    539       static="false" final="false" visibility="public"
    540       deprecated="not deprecated">
    541       <param name="source" type="java.lang.Object"/>
    542       <doc>
    543       <![CDATA[Returns a binder that uses {@code source} as the reference location for
    544  configuration errors. This is typically a {@link StackTraceElement}
    545  for {@code .java} source but it could any binding source, such as the
    546  path to a {@code .properties} file.
    547 
    548  @param source any object representing the source location and has a
    549      concise {@link Object#toString() toString()} value
    550  @return a binder that shares its configuration with this binder
    551  @since 2.0]]>
    552       </doc>
    553     </method>
    554     <method name="skipSources" return="com.google.inject.Binder"
    555       abstract="false" native="false" synchronized="false"
    556       static="false" final="false" visibility="public"
    557       deprecated="not deprecated">
    558       <param name="classesToSkip" type="java.lang.Class[]"/>
    559       <doc>
    560       <![CDATA[Returns a binder that skips {@code classesToSkip} when identify the
    561  calling code. The caller's {@link StackTraceElement} is used to locate
    562  the source of configuration errors.
    563 
    564  @param classesToSkip library classes that create bindings on behalf of
    565       their clients.
    566  @return a binder that shares its configuration with this binder.
    567  @since 2.0]]>
    568       </doc>
    569     </method>
    570     <method name="newPrivateBinder" return="com.google.inject.PrivateBinder"
    571       abstract="false" native="false" synchronized="false"
    572       static="false" final="false" visibility="public"
    573       deprecated="not deprecated">
    574       <doc>
    575       <![CDATA[Creates a new private child environment for bindings and other configuration. The returned
    576  binder can be used to add and configuration information in this environment. See {@link
    577  PrivateModule} for details.
    578 
    579  @return a binder that inherits configuration from this binder. Only exposed configuration on
    580       the returned binder will be visible to this binder.
    581  @since 2.0]]>
    582       </doc>
    583     </method>
    584     <doc>
    585     <![CDATA[Collects configuration information (primarily <i>bindings</i>) which will be
    586  used to create an {@link Injector}. Guice provides this object to your
    587  application's {@link Module} implementors so they may each contribute
    588  their own bindings and other registrations.
    589 
    590  <h3>The Guice Binding EDSL</h3>
    591 
    592  Guice uses an <i>embedded domain-specific language</i>, or EDSL, to help you
    593  create bindings simply and readably.  This approach is great for overall
    594  usability, but it does come with a small cost: <b>it is difficult to
    595  learn how to use the Binding EDSL by reading
    596  method-level javadocs</b>.  Instead, you should consult the series of
    597  examples below.  To save space, these examples omit the opening
    598  {@code binder}, just as you will if your module extends
    599  {@link AbstractModule}.
    600 
    601  <pre>
    602      bind(ServiceImpl.class);</pre>
    603 
    604  This statement does essentially nothing; it "binds the {@code ServiceImpl}
    605  class to itself" and does not change Guice's default behavior.  You may still
    606  want to use this if you prefer your {@link Module} class to serve as an
    607  explicit <i>manifest</i> for the services it provides.  Also, in rare cases,
    608  Guice may be unable to validate a binding at injector creation time unless it
    609  is given explicitly.
    610 
    611  <pre>
    612      bind(Service.class).to(ServiceImpl.class);</pre>
    613 
    614  Specifies that a request for a {@code Service} instance with no binding
    615  annotations should be treated as if it were a request for a
    616  {@code ServiceImpl} instance. This <i>overrides</i> the function of any
    617  {@link ImplementedBy @ImplementedBy} or {@link ProvidedBy @ProvidedBy}
    618  annotations found on {@code Service}, since Guice will have already
    619  "moved on" to {@code ServiceImpl} before it reaches the point when it starts
    620  looking for these annotations.
    621 
    622  <pre>
    623      bind(Service.class).toProvider(ServiceProvider.class);</pre>
    624 
    625  In this example, {@code ServiceProvider} must extend or implement
    626  {@code Provider<Service>}. This binding specifies that Guice should resolve
    627  an unannotated injection request for {@code Service} by first resolving an
    628  instance of {@code ServiceProvider} in the regular way, then calling
    629  {@link Provider#get get()} on the resulting Provider instance to obtain the
    630  {@code Service} instance.
    631 
    632  <p>The {@link Provider} you use here does not have to be a "factory"; that
    633  is, a provider which always <i>creates</i> each instance it provides.
    634  However, this is generally a good practice to follow.  You can then use
    635  Guice's concept of {@link Scope scopes} to guide when creation should happen
    636  -- "letting Guice work for you".
    637 
    638  <pre>
    639      bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);</pre>
    640 
    641  Like the previous example, but only applies to injection requests that use
    642  the binding annotation {@code @Red}.  If your module also includes bindings
    643  for particular <i>values</i> of the {@code @Red} annotation (see below),
    644  then this binding will serve as a "catch-all" for any values of {@code @Red}
    645  that have no exact match in the bindings.
    646  
    647  <pre>
    648      bind(ServiceImpl.class).in(Singleton.class);
    649      // or, alternatively
    650      bind(ServiceImpl.class).in(Scopes.SINGLETON);</pre>
    651 
    652  Either of these statements places the {@code ServiceImpl} class into
    653  singleton scope.  Guice will create only one instance of {@code ServiceImpl}
    654  and will reuse it for all injection requests of this type.  Note that it is
    655  still possible to bind another instance of {@code ServiceImpl} if the second
    656  binding is qualified by an annotation as in the previous example.  Guice is
    657  not overly concerned with <i>preventing</i> you from creating multiple
    658  instances of your "singletons", only with <i>enabling</i> your application to
    659  share only one instance if that's all you tell Guice you need.
    660 
    661  <p><b>Note:</b> a scope specified in this way <i>overrides</i> any scope that
    662  was specified with an annotation on the {@code ServiceImpl} class.
    663  
    664  <p>Besides {@link Singleton}/{@link Scopes#SINGLETON}, there are
    665  servlet-specific scopes available in
    666  {@code com.google.inject.servlet.ServletScopes}, and your Modules can
    667  contribute their own custom scopes for use here as well.
    668 
    669  <pre>
    670      bind(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {})
    671          .to(CreditCardPaymentService.class);</pre>
    672 
    673  This admittedly odd construct is the way to bind a parameterized type. It
    674  tells Guice how to honor an injection request for an element of type
    675  {@code PaymentService<CreditCard>}. The class
    676  {@code CreditCardPaymentService} must implement the
    677  {@code PaymentService<CreditCard>} interface.  Guice cannot currently bind or
    678  inject a generic type, such as {@code Set<E>}; all type parameters must be
    679  fully specified.
    680 
    681  <pre>
    682      bind(Service.class).toInstance(new ServiceImpl());
    683      // or, alternatively
    684      bind(Service.class).toInstance(SomeLegacyRegistry.getService());</pre>
    685 
    686  In this example, your module itself, <i>not Guice</i>, takes responsibility
    687  for obtaining a {@code ServiceImpl} instance, then asks Guice to always use
    688  this single instance to fulfill all {@code Service} injection requests.  When
    689  the {@link Injector} is created, it will automatically perform field
    690  and method injection for this instance, but any injectable constructor on
    691  {@code ServiceImpl} is simply ignored.  Note that using this approach results
    692  in "eager loading" behavior that you can't control.
    693 
    694  <pre>
    695      bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre>
    696 
    697  Sets up a constant binding. Constant injections must always be annotated.
    698  When a constant binding's value is a string, it is eligile for conversion to
    699  all primitive types, to {@link Enum#valueOf(Class, String) all enums}, and to
    700  {@link Class#forName class literals}. Conversions for other types can be
    701  configured using {@link #convertToTypes(Matcher, TypeConverter)
    702  convertToTypes()}.
    703 
    704  <pre>
    705    {@literal @}Color("red") Color red; // A member variable (field)
    706     . . .
    707      red = MyModule.class.getDeclaredField("red").getAnnotation(Color.class);
    708      bind(Service.class).annotatedWith(red).to(RedService.class);</pre>
    709 
    710  If your binding annotation has parameters you can apply different bindings to
    711  different specific values of your annotation.  Getting your hands on the
    712  right instance of the annotation is a bit of a pain -- one approach, shown
    713  above, is to apply a prototype annotation to a field in your module class, so
    714  that you can read this annotation instance and give it to Guice.
    715 
    716  <pre>
    717      bind(Service.class)
    718          .annotatedWith(Names.named("blue"))
    719          .to(BlueService.class);</pre>
    720 
    721  Differentiating by names is a common enough use case that we provided a
    722  standard annotation, {@link com.google.inject.name.Named @Named}.  Because of
    723  Guice's library support, binding by name is quite easier than in the
    724  arbitrary binding annotation case we just saw.  However, remember that these
    725  names will live in a single flat namespace with all the other names used in
    726  your application.
    727 
    728  <p>The above list of examples is far from exhaustive.  If you can think of
    729  how the concepts of one example might coexist with the concepts from another,
    730  you can most likely weave the two together.  If the two concepts make no
    731  sense with each other, you most likely won't be able to do it.  In a few
    732  cases Guice will let something bogus slip by, and will then inform you of
    733  the problems at runtime, as soon as you try to create your Injector.
    734 
    735  <p>The other methods of Binder such as {@link #bindScope},
    736  {@link #bindInterceptor}, {@link #install}, {@link #requestStaticInjection},
    737  {@link #addError} and {@link #currentStage} are not part of the Binding EDSL;
    738  you can learn how to use these in the usual way, from the method
    739  documentation.
    740 
    741  @author crazybob (a] google.com (Bob Lee)
    742  @author jessewilson (a] google.com (Jesse Wilson)
    743  @author kevinb (a] google.com (Kevin Bourrillion)]]>
    744     </doc>
    745   </interface>
    746   <!-- end interface com.google.inject.Binder -->
    747   <!-- start interface com.google.inject.Binding -->
    748   <interface name="Binding"    abstract="true"
    749     static="false" final="false" visibility="public"
    750     deprecated="not deprecated">
    751     <implements name="com.google.inject.spi.Element"/>
    752     <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
    753       abstract="false" native="false" synchronized="false"
    754       static="false" final="false" visibility="public"
    755       deprecated="not deprecated">
    756       <doc>
    757       <![CDATA[Returns the key for this binding.]]>
    758       </doc>
    759     </method>
    760     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
    761       abstract="false" native="false" synchronized="false"
    762       static="false" final="false" visibility="public"
    763       deprecated="not deprecated">
    764       <doc>
    765       <![CDATA[Returns the scoped provider guice uses to fulfill requests for this
    766  binding.
    767 
    768  @throws UnsupportedOperationException when invoked on a {@link Binding}
    769       created via {@link com.google.inject.spi.Elements#getElements}. This
    770       method is only supported on {@link Binding}s returned from an injector.]]>
    771       </doc>
    772     </method>
    773     <method name="acceptTargetVisitor" return="V"
    774       abstract="false" native="false" synchronized="false"
    775       static="false" final="false" visibility="public"
    776       deprecated="not deprecated">
    777       <param name="visitor" type="com.google.inject.spi.BindingTargetVisitor&lt;? super T, V&gt;"/>
    778       <doc>
    779       <![CDATA[Accepts a target visitor. Invokes the visitor method specific to this binding's target.
    780 
    781  @param visitor to call back on
    782  @since 2.0]]>
    783       </doc>
    784     </method>
    785     <method name="acceptScopingVisitor" return="V"
    786       abstract="false" native="false" synchronized="false"
    787       static="false" final="false" visibility="public"
    788       deprecated="not deprecated">
    789       <param name="visitor" type="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
    790       <doc>
    791       <![CDATA[Accepts a scoping visitor. Invokes the visitor method specific to this binding's scoping.
    792 
    793  @param visitor to call back on
    794  @since 2.0]]>
    795       </doc>
    796     </method>
    797     <doc>
    798     <![CDATA[A mapping from a key (type and optional annotation) to the strategy for getting instances of the
    799  type. This interface is part of the introspection API and is intended primarily for use by 
    800  tools.
    801 
    802  <p>Bindings are created in several ways:
    803  <ul>
    804      <li>Explicitly in a module, via {@code bind()} and {@code bindConstant()}
    805          statements:
    806  <pre>
    807      bind(Service.class).annotatedWith(Red.class).to(ServiceImpl.class);
    808      bindConstant().annotatedWith(ServerHost.class).to(args[0]);</pre></li>
    809      <li>Implicitly by the Injector by following a type's {@link ImplementedBy
    810          pointer} {@link ProvidedBy annotations} or by using its {@link Inject annotated} or
    811          default constructor.</li>
    812      <li>By converting a bound instance to a different type.</li>
    813      <li>For {@link Provider providers}, by delegating to the binding for the provided type.</li>
    814  </ul>
    815 
    816 
    817  <p>They exist on both modules and on injectors, and their behaviour is different for each:
    818  <ul>
    819      <li><strong>Module bindings</strong> are incomplete and cannot be used to provide instances.
    820          This is because the applicable scopes and interceptors may not be known until an injector
    821          is created. From a tool's perspective, module bindings are like the injector's source
    822          code. They can be inspected or rewritten, but this analysis must be done statically.</li>
    823      <li><strong>Injector bindings</strong> are complete and valid and can be used to provide
    824          instances. From a tools' perspective, injector bindings are like reflection for an
    825          injector. They have full runtime information, including the complete graph of injections
    826          necessary to satisfy a binding.</li>
    827  </ul>
    828 
    829  @param <T> the bound type. The injected is always assignable to this type.
    830 
    831  @author crazybob (a] google.com (Bob Lee)
    832  @author jessewilson (a] google.com (Jesse Wilson)]]>
    833     </doc>
    834   </interface>
    835   <!-- end interface com.google.inject.Binding -->
    836   <!-- start class com.google.inject.BindingAnnotation -->
    837   <class name="BindingAnnotation"    abstract="true"
    838     static="false" final="false" visibility="public"
    839     deprecated="not deprecated">
    840     <implements name="java.lang.annotation.Annotation"/>
    841     <doc>
    842     <![CDATA[Annotates annotations which are used for binding. Only one such annotation
    843  may apply to a single injection point. You must also annotate binder
    844  annotations with {@code @Retention(RUNTIME)}. For example:
    845 
    846  <pre>
    847    {@code @}Retention(RUNTIME)
    848    {@code @}Target({ FIELD, PARAMETER, METHOD })
    849    {@code @}BindingAnnotation
    850    public {@code @}interface Transactional {}
    851  </pre>
    852 
    853  @author crazybob (a] google.com (Bob Lee)]]>
    854     </doc>
    855   </class>
    856   <!-- end class com.google.inject.BindingAnnotation -->
    857   <!-- start class com.google.inject.ConfigurationException -->
    858   <class name="ConfigurationException" extends="java.lang.RuntimeException"
    859     abstract="false"
    860     static="false" final="true" visibility="public"
    861     deprecated="not deprecated">
    862     <constructor name="ConfigurationException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
    863       static="false" final="false" visibility="public"
    864       deprecated="not deprecated">
    865       <doc>
    866       <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
    867       </doc>
    868     </constructor>
    869     <method name="withPartialValue" return="com.google.inject.ConfigurationException"
    870       abstract="false" native="false" synchronized="false"
    871       static="false" final="false" visibility="public"
    872       deprecated="not deprecated">
    873       <param name="partialValue" type="java.lang.Object"/>
    874       <doc>
    875       <![CDATA[Returns a copy of this configuration exception with the specified partial value.]]>
    876       </doc>
    877     </method>
    878     <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
    879       abstract="false" native="false" synchronized="false"
    880       static="false" final="false" visibility="public"
    881       deprecated="not deprecated">
    882       <doc>
    883       <![CDATA[Returns messages for the errors that caused this exception.]]>
    884       </doc>
    885     </method>
    886     <method name="getPartialValue" return="E"
    887       abstract="false" native="false" synchronized="false"
    888       static="false" final="false" visibility="public"
    889       deprecated="not deprecated">
    890       <doc>
    891       <![CDATA[Returns a value that was only partially computed due to this exception. The caller can use
    892  this while collecting additional configuration problems.
    893 
    894  @return the partial value, or {@code null} if none was set. The type of the partial value is
    895       specified by the throwing method.]]>
    896       </doc>
    897     </method>
    898     <method name="getMessage" return="java.lang.String"
    899       abstract="false" native="false" synchronized="false"
    900       static="false" final="false" visibility="public"
    901       deprecated="not deprecated">
    902     </method>
    903     <doc>
    904     <![CDATA[Thrown when a programming error such as a misplaced annotation, illegal binding, or unsupported
    905  scope is found. Clients should catch this exception, log it, and stop execution.
    906 
    907  @author jessewilson (a] google.com (Jesse Wilson)
    908  @since 2.0]]>
    909     </doc>
    910   </class>
    911   <!-- end class com.google.inject.ConfigurationException -->
    912   <!-- start class com.google.inject.CreationException -->
    913   <class name="CreationException" extends="java.lang.RuntimeException"
    914     abstract="false"
    915     static="false" final="false" visibility="public"
    916     deprecated="not deprecated">
    917     <constructor name="CreationException" type="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
    918       static="false" final="false" visibility="public"
    919       deprecated="not deprecated">
    920       <doc>
    921       <![CDATA[Creates a CreationException containing {@code messages}.]]>
    922       </doc>
    923     </constructor>
    924     <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
    925       abstract="false" native="false" synchronized="false"
    926       static="false" final="false" visibility="public"
    927       deprecated="not deprecated">
    928       <doc>
    929       <![CDATA[Returns messages for the errors that caused this exception.]]>
    930       </doc>
    931     </method>
    932     <method name="getMessage" return="java.lang.String"
    933       abstract="false" native="false" synchronized="false"
    934       static="false" final="false" visibility="public"
    935       deprecated="not deprecated">
    936     </method>
    937     <doc>
    938     <![CDATA[Thrown when errors occur while creating a {@link Injector}. Includes a list of encountered
    939  errors. Clients should catch this exception, log it, and stop execution.
    940 
    941  @author crazybob (a] google.com (Bob Lee)]]>
    942     </doc>
    943   </class>
    944   <!-- end class com.google.inject.CreationException -->
    945   <!-- start class com.google.inject.Exposed -->
    946   <class name="Exposed"    abstract="true"
    947     static="false" final="false" visibility="public"
    948     deprecated="not deprecated">
    949     <implements name="java.lang.annotation.Annotation"/>
    950     <doc>
    951     <![CDATA[Acccompanies a {@literal @}{@link com.google.inject.Provides Provides} method annotation in a
    952  private module to indicate that the provided binding is exposed.
    953 
    954  @author jessewilson (a] google.com (Jesse Wilson)
    955  @since 2.0]]>
    956     </doc>
    957   </class>
    958   <!-- end class com.google.inject.Exposed -->
    959   <!-- start class com.google.inject.Guice -->
    960   <class name="Guice" extends="java.lang.Object"
    961     abstract="false"
    962     static="false" final="true" visibility="public"
    963     deprecated="not deprecated">
    964     <method name="createInjector" return="com.google.inject.Injector"
    965       abstract="false" native="false" synchronized="false"
    966       static="true" final="false" visibility="public"
    967       deprecated="not deprecated">
    968       <param name="modules" type="com.google.inject.Module[]"/>
    969       <doc>
    970       <![CDATA[Creates an injector for the given set of modules.
    971 
    972  @throws CreationException if one or more errors occur during Injector
    973      construction]]>
    974       </doc>
    975     </method>
    976     <method name="createInjector" return="com.google.inject.Injector"
    977       abstract="false" native="false" synchronized="false"
    978       static="true" final="false" visibility="public"
    979       deprecated="not deprecated">
    980       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
    981       <doc>
    982       <![CDATA[Creates an injector for the given set of modules.
    983 
    984  @throws CreationException if one or more errors occur during Injector
    985      creation]]>
    986       </doc>
    987     </method>
    988     <method name="createInjector" return="com.google.inject.Injector"
    989       abstract="false" native="false" synchronized="false"
    990       static="true" final="false" visibility="public"
    991       deprecated="not deprecated">
    992       <param name="stage" type="com.google.inject.Stage"/>
    993       <param name="modules" type="com.google.inject.Module[]"/>
    994       <doc>
    995       <![CDATA[Creates an injector for the given set of modules, in a given development
    996  stage.
    997 
    998  @throws CreationException if one or more errors occur during Injector
    999      creation]]>
   1000       </doc>
   1001     </method>
   1002     <method name="createInjector" return="com.google.inject.Injector"
   1003       abstract="false" native="false" synchronized="false"
   1004       static="true" final="false" visibility="public"
   1005       deprecated="not deprecated">
   1006       <param name="stage" type="com.google.inject.Stage"/>
   1007       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   1008       <doc>
   1009       <![CDATA[Creates an injector for the given set of modules, in a given development
   1010  stage.
   1011 
   1012  @throws CreationException if one or more errors occur during Injector
   1013      construction]]>
   1014       </doc>
   1015     </method>
   1016     <doc>
   1017     <![CDATA[The entry point to the Guice framework. Creates {@link Injector}s from
   1018  {@link Module}s.
   1019 
   1020  <p>Guice supports a model of development that draws clear boundaries between
   1021  APIs, Implementations of these APIs, Modules which configure these
   1022  implementations, and finally Applications which consist of a collection of
   1023  Modules. It is the Application, which typically defines your {@code main()}
   1024  method, that bootstraps the Guice Injector using the {@code Guice} class, as
   1025  in this example:
   1026  <pre>
   1027      public class FooApplication {
   1028        public static void main(String[] args) {
   1029          Injector injector = Guice.createInjector(
   1030              new ModuleA(),
   1031              new ModuleB(),
   1032              . . .
   1033              new FooApplicationFlagsModule(args)
   1034          );
   1035 
   1036          // Now just bootstrap the application and you're done
   1037          FooStarter starter = injector.getInstance(FooStarter.class);
   1038          starter.runApplication();
   1039        }
   1040      }
   1041  </pre>]]>
   1042     </doc>
   1043   </class>
   1044   <!-- end class com.google.inject.Guice -->
   1045   <!-- start class com.google.inject.ImplementedBy -->
   1046   <class name="ImplementedBy"    abstract="true"
   1047     static="false" final="false" visibility="public"
   1048     deprecated="not deprecated">
   1049     <implements name="java.lang.annotation.Annotation"/>
   1050     <doc>
   1051     <![CDATA[A pointer to the default implementation of a type.
   1052 
   1053  @author crazybob (a] google.com (Bob Lee)]]>
   1054     </doc>
   1055   </class>
   1056   <!-- end class com.google.inject.ImplementedBy -->
   1057   <!-- start class com.google.inject.Inject -->
   1058   <class name="Inject"    abstract="true"
   1059     static="false" final="false" visibility="public"
   1060     deprecated="not deprecated">
   1061     <implements name="java.lang.annotation.Annotation"/>
   1062     <doc>
   1063     <![CDATA[Annotates members of your implementation class (constructors, methods
   1064  and fields) into which the {@link Injector} should inject values.
   1065  The Injector fulfills injection requests for:
   1066 
   1067  <ul>
   1068  <li>Every instance it constructs. The class being constructed must have
   1069  exactly one of its constructors marked with {@code @Inject} or must have a
   1070  constructor taking no parameters. The Injector then proceeds to perform
   1071  method and field injections.
   1072  
   1073  <li>Pre-constructed instances passed to {@link Injector#injectMembers},
   1074  {@link com.google.inject.binder.LinkedBindingBuilder#toInstance(Object)} and
   1075  {@link com.google.inject.binder.LinkedBindingBuilder#toProvider(Provider)}.
   1076  In this case all constructors are, of course, ignored.
   1077 
   1078  <li>Static fields and methods of classes which any {@link Module} has
   1079  specifically requested static injection for, using
   1080  {@link Binder#requestStaticInjection}.
   1081  </ul>
   1082 
   1083  In all cases, a member can be injected regardless of its Java access
   1084  specifier (private, default, protected, public).
   1085 
   1086  @author crazybob (a] google.com (Bob Lee)]]>
   1087     </doc>
   1088   </class>
   1089   <!-- end class com.google.inject.Inject -->
   1090   <!-- start interface com.google.inject.Injector -->
   1091   <interface name="Injector"    abstract="true"
   1092     static="false" final="false" visibility="public"
   1093     deprecated="not deprecated">
   1094     <method name="injectMembers"
   1095       abstract="false" native="false" synchronized="false"
   1096       static="false" final="false" visibility="public"
   1097       deprecated="not deprecated">
   1098       <param name="instance" type="java.lang.Object"/>
   1099       <doc>
   1100       <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
   1101  absence of an injectable constructor.
   1102 
   1103  <p>Whenever Guice creates an instance, it performs this injection automatically (after first
   1104  performing constructor injection), so if you're able to let Guice create all your objects for
   1105  you, you'll never need to use this method.
   1106 
   1107  @param instance to inject members on
   1108 
   1109  @see Binder#getMembersInjector(Class) for a preferred alternative that supports checks before
   1110   run time]]>
   1111       </doc>
   1112     </method>
   1113     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   1114       abstract="false" native="false" synchronized="false"
   1115       static="false" final="false" visibility="public"
   1116       deprecated="not deprecated">
   1117       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1118       <doc>
   1119       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
   1120  of the given type {@code T}.
   1121 
   1122  @param typeLiteral type to get members injector for
   1123  @see Binder#getMembersInjector(TypeLiteral) for an alternative that offers up front error
   1124   detection
   1125  @since 2.0]]>
   1126       </doc>
   1127     </method>
   1128     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   1129       abstract="false" native="false" synchronized="false"
   1130       static="false" final="false" visibility="public"
   1131       deprecated="not deprecated">
   1132       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1133       <doc>
   1134       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
   1135  of the given type {@code T}. When feasible, use {@link Binder#getMembersInjector(TypeLiteral)}
   1136  instead to get increased up front error detection.
   1137 
   1138  @param type type to get members injector for
   1139  @see Binder#getMembersInjector(Class) for an alternative that offers up front error
   1140   detection
   1141  @since 2.0]]>
   1142       </doc>
   1143     </method>
   1144     <method name="getBindings" return="java.util.Map&lt;com.google.inject.Key&lt;?&gt;, com.google.inject.Binding&lt;?&gt;&gt;"
   1145       abstract="false" native="false" synchronized="false"
   1146       static="false" final="false" visibility="public"
   1147       deprecated="not deprecated">
   1148       <doc>
   1149       <![CDATA[Returns all explicit bindings.
   1150 
   1151  <p>The returned map does not include bindings inherited from a {@link #getParent() parent
   1152  injector}, should one exist. The returned map is guaranteed to iterate (for example, with
   1153  its {@link java.util.Map#entrySet()} iterator) in the order of insertion. In other words,
   1154  the order in which bindings appear in user Modules.
   1155 
   1156  <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
   1157       </doc>
   1158     </method>
   1159     <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
   1160       abstract="false" native="false" synchronized="false"
   1161       static="false" final="false" visibility="public"
   1162       deprecated="not deprecated">
   1163       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1164       <doc>
   1165       <![CDATA[Returns the binding for the given injection key. This will be an explicit bindings if the key
   1166  was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
   1167  be created if necessary.
   1168 
   1169  <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
   1170 
   1171  @throws ConfigurationException if this injector cannot find or create the binding.]]>
   1172       </doc>
   1173     </method>
   1174     <method name="getBinding" return="com.google.inject.Binding&lt;T&gt;"
   1175       abstract="false" native="false" synchronized="false"
   1176       static="false" final="false" visibility="public"
   1177       deprecated="not deprecated">
   1178       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1179       <doc>
   1180       <![CDATA[Returns the binding for the given type. This will be an explicit bindings if the injection key
   1181  was bound explicitly by a module, or an implicit binding otherwise. The implicit binding will
   1182  be created if necessary.
   1183 
   1184  <p>This method is part of the Guice SPI and is intended for use by tools and extensions.
   1185 
   1186  @throws ConfigurationException if this injector cannot find or create the binding.
   1187  @since 2.0]]>
   1188       </doc>
   1189     </method>
   1190     <method name="findBindingsByType" return="java.util.List&lt;com.google.inject.Binding&lt;T&gt;&gt;"
   1191       abstract="false" native="false" synchronized="false"
   1192       static="false" final="false" visibility="public"
   1193       deprecated="not deprecated">
   1194       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1195       <doc>
   1196       <![CDATA[Returns all explicit bindings for {@code type}.
   1197 
   1198  <p>This method is part of the Guice SPI and is intended for use by tools and extensions.]]>
   1199       </doc>
   1200     </method>
   1201     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   1202       abstract="false" native="false" synchronized="false"
   1203       static="false" final="false" visibility="public"
   1204       deprecated="not deprecated">
   1205       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1206       <doc>
   1207       <![CDATA[Returns the provider used to obtain instances for the given injection key. When feasible, avoid
   1208  using this method, in favor of having Guice inject your dependencies ahead of time.
   1209 
   1210  @throws ConfigurationException if this injector cannot find or create the provider.
   1211  @see Binder#getProvider(Key) for an alternative that offers up front error detection]]>
   1212       </doc>
   1213     </method>
   1214     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   1215       abstract="false" native="false" synchronized="false"
   1216       static="false" final="false" visibility="public"
   1217       deprecated="not deprecated">
   1218       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1219       <doc>
   1220       <![CDATA[Returns the provider used to obtain instances for the given type. When feasible, avoid
   1221  using this method, in favor of having Guice inject your dependencies ahead of time.
   1222 
   1223  @throws ConfigurationException if this injector cannot find or create the provider.
   1224  @see Binder#getProvider(Class) for an alternative that offers up front error detection]]>
   1225       </doc>
   1226     </method>
   1227     <method name="getInstance" return="T"
   1228       abstract="false" native="false" synchronized="false"
   1229       static="false" final="false" visibility="public"
   1230       deprecated="not deprecated">
   1231       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1232       <doc>
   1233       <![CDATA[Returns the appropriate instance for the given injection key; equivalent to {@code
   1234  getProvider(key).get()}. When feasible, avoid using this method, in favor of having Guice
   1235  inject your dependencies ahead of time.
   1236 
   1237  @throws ConfigurationException if this injector cannot find or create the provider.
   1238  @throws ProvisionException if there was a runtime failure while providing an instance.]]>
   1239       </doc>
   1240     </method>
   1241     <method name="getInstance" return="T"
   1242       abstract="false" native="false" synchronized="false"
   1243       static="false" final="false" visibility="public"
   1244       deprecated="not deprecated">
   1245       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1246       <doc>
   1247       <![CDATA[Returns the appropriate instance for the given injection type; equivalent to {@code
   1248  getProvider(type).get()}. When feasible, avoid using this method, in favor of having Guice
   1249  inject your dependencies ahead of time.
   1250 
   1251  @throws ConfigurationException if this injector cannot find or create the provider.
   1252  @throws ProvisionException if there was a runtime failure while providing an instance.]]>
   1253       </doc>
   1254     </method>
   1255     <method name="getParent" return="com.google.inject.Injector"
   1256       abstract="false" native="false" synchronized="false"
   1257       static="false" final="false" visibility="public"
   1258       deprecated="not deprecated">
   1259       <doc>
   1260       <![CDATA[Returns this injector's parent, or {@code null} if this is a top-level injector.
   1261 
   1262  @since 2.0]]>
   1263       </doc>
   1264     </method>
   1265     <method name="createChildInjector" return="com.google.inject.Injector"
   1266       abstract="false" native="false" synchronized="false"
   1267       static="false" final="false" visibility="public"
   1268       deprecated="not deprecated">
   1269       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   1270       <doc>
   1271       <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
   1272  interceptors and type converters are inherited -- they are visible to the child injector.
   1273  Elements of the child injector are not visible to its parent.
   1274 
   1275  <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
   1276  whenever possible. This allows for scoped instances to be shared between injectors. Use
   1277  explicit bindings to prevent bindings from being shared with the parent injector.
   1278 
   1279  <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
   1280  bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
   1281  injector to itself.
   1282 
   1283  @since 2.0]]>
   1284       </doc>
   1285     </method>
   1286     <method name="createChildInjector" return="com.google.inject.Injector"
   1287       abstract="false" native="false" synchronized="false"
   1288       static="false" final="false" visibility="public"
   1289       deprecated="not deprecated">
   1290       <param name="modules" type="com.google.inject.Module[]"/>
   1291       <doc>
   1292       <![CDATA[Returns a new injector that inherits all state from this injector. All bindings, scopes,
   1293  interceptors and type converters are inherited -- they are visible to the child injector.
   1294  Elements of the child injector are not visible to its parent.
   1295 
   1296  <p>Just-in-time bindings created for child injectors will be created in an ancestor injector
   1297  whenever possible. This allows for scoped instances to be shared between injectors. Use
   1298  explicit bindings to prevent bindings from being shared with the parent injector.
   1299 
   1300  <p>No key may be bound by both an injector and one of its ancestors. This includes just-in-time
   1301  bindings. The lone exception is the key for {@code Injector.class}, which is bound by each
   1302  injector to itself.
   1303 
   1304  @since 2.0]]>
   1305       </doc>
   1306     </method>
   1307     <doc>
   1308     <![CDATA[Builds the graphs of objects that make up your application. The injector tracks the dependencies
   1309  for each type and uses bindings to inject them. This is the core of Guice, although you rarely
   1310  interact with it directly. This "behind-the-scenes" operation is what distinguishes dependency
   1311  injection from its cousin, the service locator pattern.
   1312 
   1313  <p>Contains several default bindings:
   1314 
   1315  <ul>
   1316  <li>This {@link Injector} instance itself
   1317  <li>A {@code Provider<T>} for each binding of type {@code T}
   1318  <li>The {@link java.util.logging.Logger} for the class being injected
   1319  <li>The {@link Stage} in which the Injector was created
   1320  </ul>
   1321 
   1322  Injectors are created using the facade class {@link Guice}.
   1323 
   1324  <p>An injector can also {@link #injectMembers(Object) inject the dependencies} of
   1325  already-constructed instances. This can be used to interoperate with objects created by other
   1326  frameworks or services.
   1327 
   1328  <p>Injectors can be {@link #createChildInjector(Iterable) hierarchical}. Child injectors inherit
   1329  the configuration of their parent injectors, but the converse does not hold.
   1330 
   1331  <p>The injector's {@link #getBindings() internal bindings} are available for introspection. This
   1332  enables tools and extensions to operate on an injector reflectively.
   1333 
   1334  @author crazybob (a] google.com (Bob Lee)
   1335  @author jessewilson (a] google.com (Jesse Wilson)]]>
   1336     </doc>
   1337   </interface>
   1338   <!-- end interface com.google.inject.Injector -->
   1339   <!-- start class com.google.inject.Key -->
   1340   <class name="Key" extends="java.lang.Object"
   1341     abstract="false"
   1342     static="false" final="false" visibility="public"
   1343     deprecated="not deprecated">
   1344     <constructor name="Key" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
   1345       static="false" final="false" visibility="protected"
   1346       deprecated="not deprecated">
   1347       <doc>
   1348       <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
   1349 
   1350  <p>Clients create an empty anonymous subclass. Doing so embeds the type
   1351  parameter in the anonymous class's type hierarchy so we can reconstitute it
   1352  at runtime despite erasure.
   1353 
   1354  <p>Example usage for a binding of type {@code Foo} annotated with
   1355  {@code @Bar}:
   1356 
   1357  <p>{@code new Key<Foo>(Bar.class) {}}.]]>
   1358       </doc>
   1359     </constructor>
   1360     <constructor name="Key" type="java.lang.annotation.Annotation"
   1361       static="false" final="false" visibility="protected"
   1362       deprecated="not deprecated">
   1363       <doc>
   1364       <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
   1365 
   1366  <p>Clients create an empty anonymous subclass. Doing so embeds the type
   1367  parameter in the anonymous class's type hierarchy so we can reconstitute it
   1368  at runtime despite erasure.
   1369 
   1370  <p>Example usage for a binding of type {@code Foo} annotated with
   1371  {@code @Bar}:
   1372 
   1373  <p>{@code new Key<Foo>(new Bar()) {}}.]]>
   1374       </doc>
   1375     </constructor>
   1376     <constructor name="Key"
   1377       static="false" final="false" visibility="protected"
   1378       deprecated="not deprecated">
   1379       <doc>
   1380       <![CDATA[Constructs a new key. Derives the type from this class's type parameter.
   1381 
   1382  <p>Clients create an empty anonymous subclass. Doing so embeds the type
   1383  parameter in the anonymous class's type hierarchy so we can reconstitute it
   1384  at runtime despite erasure.
   1385 
   1386  <p>Example usage for a binding of type {@code Foo}:
   1387 
   1388  <p>{@code new Key<Foo>() {}}.]]>
   1389       </doc>
   1390     </constructor>
   1391     <method name="getTypeLiteral" return="com.google.inject.TypeLiteral&lt;T&gt;"
   1392       abstract="false" native="false" synchronized="false"
   1393       static="false" final="true" visibility="public"
   1394       deprecated="not deprecated">
   1395       <doc>
   1396       <![CDATA[Gets the key type.]]>
   1397       </doc>
   1398     </method>
   1399     <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
   1400       abstract="false" native="false" synchronized="false"
   1401       static="false" final="true" visibility="public"
   1402       deprecated="not deprecated">
   1403       <doc>
   1404       <![CDATA[Gets the annotation type.]]>
   1405       </doc>
   1406     </method>
   1407     <method name="getAnnotation" return="java.lang.annotation.Annotation"
   1408       abstract="false" native="false" synchronized="false"
   1409       static="false" final="true" visibility="public"
   1410       deprecated="not deprecated">
   1411       <doc>
   1412       <![CDATA[Gets the annotation.]]>
   1413       </doc>
   1414     </method>
   1415     <method name="equals" return="boolean"
   1416       abstract="false" native="false" synchronized="false"
   1417       static="false" final="true" visibility="public"
   1418       deprecated="not deprecated">
   1419       <param name="o" type="java.lang.Object"/>
   1420     </method>
   1421     <method name="hashCode" return="int"
   1422       abstract="false" native="false" synchronized="false"
   1423       static="false" final="true" visibility="public"
   1424       deprecated="not deprecated">
   1425     </method>
   1426     <method name="toString" return="java.lang.String"
   1427       abstract="false" native="false" synchronized="false"
   1428       static="false" final="true" visibility="public"
   1429       deprecated="not deprecated">
   1430     </method>
   1431     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1432       abstract="false" native="false" synchronized="false"
   1433       static="true" final="false" visibility="public"
   1434       deprecated="not deprecated">
   1435       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1436       <doc>
   1437       <![CDATA[Gets a key for an injection type.]]>
   1438       </doc>
   1439     </method>
   1440     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1441       abstract="false" native="false" synchronized="false"
   1442       static="true" final="false" visibility="public"
   1443       deprecated="not deprecated">
   1444       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1445       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   1446       <doc>
   1447       <![CDATA[Gets a key for an injection type and an annotation type.]]>
   1448       </doc>
   1449     </method>
   1450     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1451       abstract="false" native="false" synchronized="false"
   1452       static="true" final="false" visibility="public"
   1453       deprecated="not deprecated">
   1454       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1455       <param name="annotation" type="java.lang.annotation.Annotation"/>
   1456       <doc>
   1457       <![CDATA[Gets a key for an injection type and an annotation.]]>
   1458       </doc>
   1459     </method>
   1460     <method name="get" return="com.google.inject.Key&lt;?&gt;"
   1461       abstract="false" native="false" synchronized="false"
   1462       static="true" final="false" visibility="public"
   1463       deprecated="not deprecated">
   1464       <param name="type" type="java.lang.reflect.Type"/>
   1465       <doc>
   1466       <![CDATA[Gets a key for an injection type.]]>
   1467       </doc>
   1468     </method>
   1469     <method name="get" return="com.google.inject.Key&lt;?&gt;"
   1470       abstract="false" native="false" synchronized="false"
   1471       static="true" final="false" visibility="public"
   1472       deprecated="not deprecated">
   1473       <param name="type" type="java.lang.reflect.Type"/>
   1474       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   1475       <doc>
   1476       <![CDATA[Gets a key for an injection type and an annotation type.]]>
   1477       </doc>
   1478     </method>
   1479     <method name="get" return="com.google.inject.Key&lt;?&gt;"
   1480       abstract="false" native="false" synchronized="false"
   1481       static="true" final="false" visibility="public"
   1482       deprecated="not deprecated">
   1483       <param name="type" type="java.lang.reflect.Type"/>
   1484       <param name="annotation" type="java.lang.annotation.Annotation"/>
   1485       <doc>
   1486       <![CDATA[Gets a key for an injection type and an annotation.]]>
   1487       </doc>
   1488     </method>
   1489     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1490       abstract="false" native="false" synchronized="false"
   1491       static="true" final="false" visibility="public"
   1492       deprecated="not deprecated">
   1493       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1494       <doc>
   1495       <![CDATA[Gets a key for an injection type.]]>
   1496       </doc>
   1497     </method>
   1498     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1499       abstract="false" native="false" synchronized="false"
   1500       static="true" final="false" visibility="public"
   1501       deprecated="not deprecated">
   1502       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1503       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   1504       <doc>
   1505       <![CDATA[Gets a key for an injection type and an annotation type.]]>
   1506       </doc>
   1507     </method>
   1508     <method name="get" return="com.google.inject.Key&lt;T&gt;"
   1509       abstract="false" native="false" synchronized="false"
   1510       static="true" final="false" visibility="public"
   1511       deprecated="not deprecated">
   1512       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1513       <param name="annotation" type="java.lang.annotation.Annotation"/>
   1514       <doc>
   1515       <![CDATA[Gets a key for an injection type and an annotation.]]>
   1516       </doc>
   1517     </method>
   1518     <doc>
   1519     <![CDATA[Binding key consisting of an injection type and an optional annotation.
   1520  Matches the type and annotation at a point of injection.
   1521 
   1522  <p>For example, {@code Key.get(Service.class, Transactional.class)} will
   1523  match:
   1524 
   1525  <pre>
   1526    {@literal @}Inject
   1527    public void setService({@literal @}Transactional Service service) {
   1528      ...
   1529    }
   1530  </pre>
   1531 
   1532  <p>{@code Key} supports generic types via subclassing just like {@link
   1533  TypeLiteral}.
   1534 
   1535  <p>Keys do not differentiate between primitive types (int, char, etc.) and
   1536  their correpsonding wrapper types (Integer, Character, etc.). Primitive
   1537  types will be replaced with their wrapper types when keys are created.
   1538 
   1539  @author crazybob (a] google.com (Bob Lee)]]>
   1540     </doc>
   1541   </class>
   1542   <!-- end class com.google.inject.Key -->
   1543   <!-- start interface com.google.inject.MembersInjector -->
   1544   <interface name="MembersInjector"    abstract="true"
   1545     static="false" final="false" visibility="public"
   1546     deprecated="not deprecated">
   1547     <method name="injectMembers"
   1548       abstract="false" native="false" synchronized="false"
   1549       static="false" final="false" visibility="public"
   1550       deprecated="not deprecated">
   1551       <param name="instance" type="T"/>
   1552       <doc>
   1553       <![CDATA[Injects dependencies into the fields and methods of {@code instance}. Ignores the presence or
   1554  absence of an injectable constructor.
   1555 
   1556  <p>Whenever Guice creates an instance, it performs this injection automatically (after first
   1557  performing constructor injection), so if you're able to let Guice create all your objects for
   1558  you, you'll never need to use this method.
   1559 
   1560  @param instance to inject members on. May be {@code null}.]]>
   1561       </doc>
   1562     </method>
   1563     <doc>
   1564     <![CDATA[Injects dependencies into the fields and methods on instances of type {@code T}. Ignores the
   1565  presence or absence of an injectable constructor.
   1566 
   1567  @param <T> type to inject members of
   1568 
   1569  @author crazybob (a] google.com (Bob Lee)
   1570  @author jessewilson (a] google.com (Jesse Wilson)
   1571  @since 2.0]]>
   1572     </doc>
   1573   </interface>
   1574   <!-- end interface com.google.inject.MembersInjector -->
   1575   <!-- start interface com.google.inject.Module -->
   1576   <interface name="Module"    abstract="true"
   1577     static="false" final="false" visibility="public"
   1578     deprecated="not deprecated">
   1579     <method name="configure"
   1580       abstract="false" native="false" synchronized="false"
   1581       static="false" final="false" visibility="public"
   1582       deprecated="not deprecated">
   1583       <param name="binder" type="com.google.inject.Binder"/>
   1584       <doc>
   1585       <![CDATA[Contributes bindings and other configurations for this module to {@code binder}.
   1586 
   1587  <p><strong>Do not invoke this method directly</strong> to install submodules. Instead use
   1588  {@link Binder#install(Module)}, which ensures that {@link Provides provider methods} are
   1589  discovered.]]>
   1590       </doc>
   1591     </method>
   1592     <doc>
   1593     <![CDATA[A module contributes configuration information, typically interface
   1594  bindings, which will be used to create an {@link Injector}. A Guice-based
   1595  application is ultimately composed of little more than a set of
   1596  {@code Module}s and some bootstrapping code.
   1597 
   1598  <p>Your Module classes can use a more streamlined syntax by extending
   1599  {@link AbstractModule} rather than implementing this interface directly.
   1600 
   1601  <p>In addition to the bindings configured via {@link #configure}, bindings
   1602  will be created for all methods annotated with {@literal @}{@link Provides}.
   1603  Use scope and binding annotations on these methods to configure the
   1604  bindings.]]>
   1605     </doc>
   1606   </interface>
   1607   <!-- end interface com.google.inject.Module -->
   1608   <!-- start class com.google.inject.OutOfScopeException -->
   1609   <class name="OutOfScopeException" extends="java.lang.RuntimeException"
   1610     abstract="false"
   1611     static="false" final="true" visibility="public"
   1612     deprecated="not deprecated">
   1613     <constructor name="OutOfScopeException" type="java.lang.String"
   1614       static="false" final="false" visibility="public"
   1615       deprecated="not deprecated">
   1616     </constructor>
   1617     <constructor name="OutOfScopeException" type="java.lang.String, java.lang.Throwable"
   1618       static="false" final="false" visibility="public"
   1619       deprecated="not deprecated">
   1620     </constructor>
   1621     <constructor name="OutOfScopeException" type="java.lang.Throwable"
   1622       static="false" final="false" visibility="public"
   1623       deprecated="not deprecated">
   1624     </constructor>
   1625     <doc>
   1626     <![CDATA[Thrown from {@link Provider#get} when an attempt is made to access a scoped
   1627  object while the scope in question is not currently active.
   1628 
   1629  @author kevinb (a] google.com (Kevin Bourrillion)
   1630  @since 2.0]]>
   1631     </doc>
   1632   </class>
   1633   <!-- end class com.google.inject.OutOfScopeException -->
   1634   <!-- start interface com.google.inject.PrivateBinder -->
   1635   <interface name="PrivateBinder"    abstract="true"
   1636     static="false" final="false" visibility="public"
   1637     deprecated="not deprecated">
   1638     <implements name="com.google.inject.Binder"/>
   1639     <method name="expose"
   1640       abstract="false" native="false" synchronized="false"
   1641       static="false" final="false" visibility="public"
   1642       deprecated="not deprecated">
   1643       <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
   1644       <doc>
   1645       <![CDATA[Makes the binding for {@code key} available to the enclosing environment]]>
   1646       </doc>
   1647     </method>
   1648     <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
   1649       abstract="false" native="false" synchronized="false"
   1650       static="false" final="false" visibility="public"
   1651       deprecated="not deprecated">
   1652       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   1653       <doc>
   1654       <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
   1655  com.google.inject.binder.AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
   1656  binding annotation.]]>
   1657       </doc>
   1658     </method>
   1659     <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
   1660       abstract="false" native="false" synchronized="false"
   1661       static="false" final="false" visibility="public"
   1662       deprecated="not deprecated">
   1663       <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   1664       <doc>
   1665       <![CDATA[Makes a binding for {@code type} available to the enclosing environment. Use {@link
   1666  AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
   1667  binding annotation.]]>
   1668       </doc>
   1669     </method>
   1670     <method name="withSource" return="com.google.inject.PrivateBinder"
   1671       abstract="false" native="false" synchronized="false"
   1672       static="false" final="false" visibility="public"
   1673       deprecated="not deprecated">
   1674       <param name="source" type="java.lang.Object"/>
   1675     </method>
   1676     <method name="skipSources" return="com.google.inject.PrivateBinder"
   1677       abstract="false" native="false" synchronized="false"
   1678       static="false" final="false" visibility="public"
   1679       deprecated="not deprecated">
   1680       <param name="classesToSkip" type="java.lang.Class[]"/>
   1681     </method>
   1682     <doc>
   1683     <![CDATA[Returns a binder whose configuration information is hidden from its environment by default. See
   1684  {@link com.google.inject.PrivateModule PrivateModule} for details.
   1685  
   1686  @author jessewilson (a] google.com (Jesse Wilson)
   1687  @since 2.0]]>
   1688     </doc>
   1689   </interface>
   1690   <!-- end interface com.google.inject.PrivateBinder -->
   1691   <!-- start class com.google.inject.PrivateModule -->
   1692   <class name="PrivateModule" extends="java.lang.Object"
   1693     abstract="true"
   1694     static="false" final="false" visibility="public"
   1695     deprecated="not deprecated">
   1696     <implements name="com.google.inject.Module"/>
   1697     <constructor name="PrivateModule"
   1698       static="false" final="false" visibility="public"
   1699       deprecated="not deprecated">
   1700     </constructor>
   1701     <method name="configure"
   1702       abstract="false" native="false" synchronized="true"
   1703       static="false" final="true" visibility="public"
   1704       deprecated="not deprecated">
   1705       <param name="binder" type="com.google.inject.Binder"/>
   1706     </method>
   1707     <method name="configure"
   1708       abstract="true" native="false" synchronized="false"
   1709       static="false" final="false" visibility="protected"
   1710       deprecated="not deprecated">
   1711       <doc>
   1712       <![CDATA[Creates bindings and other configurations private to this module. Use {@link #expose(Class)
   1713  expose()} to make the bindings in this module available externally.]]>
   1714       </doc>
   1715     </method>
   1716     <method name="expose"
   1717       abstract="false" native="false" synchronized="false"
   1718       static="false" final="true" visibility="protected"
   1719       deprecated="not deprecated">
   1720       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1721       <doc>
   1722       <![CDATA[Makes the binding for {@code key} available to other modules and the injector.]]>
   1723       </doc>
   1724     </method>
   1725     <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
   1726       abstract="false" native="false" synchronized="false"
   1727       static="false" final="true" visibility="protected"
   1728       deprecated="not deprecated">
   1729       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   1730       <doc>
   1731       <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
   1732  AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
   1733  binding annotation.]]>
   1734       </doc>
   1735     </method>
   1736     <method name="expose" return="com.google.inject.binder.AnnotatedElementBuilder"
   1737       abstract="false" native="false" synchronized="false"
   1738       static="false" final="true" visibility="protected"
   1739       deprecated="not deprecated">
   1740       <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   1741       <doc>
   1742       <![CDATA[Makes a binding for {@code type} available to other modules and the injector. Use {@link
   1743  AnnotatedElementBuilder#annotatedWith(Class) annotatedWith()} to expose {@code type} with a
   1744  binding annotation.]]>
   1745       </doc>
   1746     </method>
   1747     <method name="binder" return="com.google.inject.PrivateBinder"
   1748       abstract="false" native="false" synchronized="false"
   1749       static="false" final="true" visibility="protected"
   1750       deprecated="not deprecated">
   1751       <doc>
   1752       <![CDATA[Returns the current binder.]]>
   1753       </doc>
   1754     </method>
   1755     <method name="bindScope"
   1756       abstract="false" native="false" synchronized="false"
   1757       static="false" final="true" visibility="protected"
   1758       deprecated="not deprecated">
   1759       <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   1760       <param name="scope" type="com.google.inject.Scope"/>
   1761       <doc>
   1762       <![CDATA[@see Binder#bindScope(Class, Scope)]]>
   1763       </doc>
   1764     </method>
   1765     <method name="bind" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
   1766       abstract="false" native="false" synchronized="false"
   1767       static="false" final="true" visibility="protected"
   1768       deprecated="not deprecated">
   1769       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1770       <doc>
   1771       <![CDATA[@see Binder#bind(Key)]]>
   1772       </doc>
   1773     </method>
   1774     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
   1775       abstract="false" native="false" synchronized="false"
   1776       static="false" final="true" visibility="protected"
   1777       deprecated="not deprecated">
   1778       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1779       <doc>
   1780       <![CDATA[@see Binder#bind(TypeLiteral)]]>
   1781       </doc>
   1782     </method>
   1783     <method name="bind" return="com.google.inject.binder.AnnotatedBindingBuilder&lt;T&gt;"
   1784       abstract="false" native="false" synchronized="false"
   1785       static="false" final="true" visibility="protected"
   1786       deprecated="not deprecated">
   1787       <param name="clazz" type="java.lang.Class&lt;T&gt;"/>
   1788       <doc>
   1789       <![CDATA[@see Binder#bind(Class)]]>
   1790       </doc>
   1791     </method>
   1792     <method name="bindConstant" return="com.google.inject.binder.AnnotatedConstantBindingBuilder"
   1793       abstract="false" native="false" synchronized="false"
   1794       static="false" final="true" visibility="protected"
   1795       deprecated="not deprecated">
   1796       <doc>
   1797       <![CDATA[@see Binder#bindConstant()]]>
   1798       </doc>
   1799     </method>
   1800     <method name="install"
   1801       abstract="false" native="false" synchronized="false"
   1802       static="false" final="true" visibility="protected"
   1803       deprecated="not deprecated">
   1804       <param name="module" type="com.google.inject.Module"/>
   1805       <doc>
   1806       <![CDATA[@see Binder#install(Module)]]>
   1807       </doc>
   1808     </method>
   1809     <method name="addError"
   1810       abstract="false" native="false" synchronized="false"
   1811       static="false" final="true" visibility="protected"
   1812       deprecated="not deprecated">
   1813       <param name="message" type="java.lang.String"/>
   1814       <param name="arguments" type="java.lang.Object[]"/>
   1815       <doc>
   1816       <![CDATA[@see Binder#addError(String, Object[])]]>
   1817       </doc>
   1818     </method>
   1819     <method name="addError"
   1820       abstract="false" native="false" synchronized="false"
   1821       static="false" final="true" visibility="protected"
   1822       deprecated="not deprecated">
   1823       <param name="t" type="java.lang.Throwable"/>
   1824       <doc>
   1825       <![CDATA[@see Binder#addError(Throwable)]]>
   1826       </doc>
   1827     </method>
   1828     <method name="addError"
   1829       abstract="false" native="false" synchronized="false"
   1830       static="false" final="true" visibility="protected"
   1831       deprecated="not deprecated">
   1832       <param name="message" type="com.google.inject.spi.Message"/>
   1833       <doc>
   1834       <![CDATA[@see Binder#addError(Message)]]>
   1835       </doc>
   1836     </method>
   1837     <method name="requestInjection"
   1838       abstract="false" native="false" synchronized="false"
   1839       static="false" final="true" visibility="protected"
   1840       deprecated="not deprecated">
   1841       <param name="instance" type="java.lang.Object"/>
   1842       <doc>
   1843       <![CDATA[@see Binder#requestInjection(Object)]]>
   1844       </doc>
   1845     </method>
   1846     <method name="requestStaticInjection"
   1847       abstract="false" native="false" synchronized="false"
   1848       static="false" final="true" visibility="protected"
   1849       deprecated="not deprecated">
   1850       <param name="types" type="java.lang.Class[]"/>
   1851       <doc>
   1852       <![CDATA[@see Binder#requestStaticInjection(Class[])]]>
   1853       </doc>
   1854     </method>
   1855     <method name="bindInterceptor"
   1856       abstract="false" native="false" synchronized="false"
   1857       static="false" final="true" visibility="protected"
   1858       deprecated="not deprecated">
   1859       <param name="classMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
   1860       <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
   1861       <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
   1862       <doc>
   1863       <![CDATA[@see Binder#bindInterceptor(com.google.inject.matcher.Matcher, com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])]]>
   1864       </doc>
   1865     </method>
   1866     <method name="requireBinding"
   1867       abstract="false" native="false" synchronized="false"
   1868       static="false" final="true" visibility="protected"
   1869       deprecated="not deprecated">
   1870       <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
   1871       <doc>
   1872       <![CDATA[Instructs Guice to require a binding to the given key.]]>
   1873       </doc>
   1874     </method>
   1875     <method name="requireBinding"
   1876       abstract="false" native="false" synchronized="false"
   1877       static="false" final="true" visibility="protected"
   1878       deprecated="not deprecated">
   1879       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   1880       <doc>
   1881       <![CDATA[Instructs Guice to require a binding to the given type.]]>
   1882       </doc>
   1883     </method>
   1884     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   1885       abstract="false" native="false" synchronized="false"
   1886       static="false" final="true" visibility="protected"
   1887       deprecated="not deprecated">
   1888       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   1889       <doc>
   1890       <![CDATA[@see Binder#getProvider(Key)]]>
   1891       </doc>
   1892     </method>
   1893     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   1894       abstract="false" native="false" synchronized="false"
   1895       static="false" final="true" visibility="protected"
   1896       deprecated="not deprecated">
   1897       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1898       <doc>
   1899       <![CDATA[@see Binder#getProvider(Class)]]>
   1900       </doc>
   1901     </method>
   1902     <method name="convertToTypes"
   1903       abstract="false" native="false" synchronized="false"
   1904       static="false" final="true" visibility="protected"
   1905       deprecated="not deprecated">
   1906       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
   1907       <param name="converter" type="com.google.inject.spi.TypeConverter"/>
   1908       <doc>
   1909       <![CDATA[@see Binder#convertToTypes(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeConverter)]]>
   1910       </doc>
   1911     </method>
   1912     <method name="currentStage" return="com.google.inject.Stage"
   1913       abstract="false" native="false" synchronized="false"
   1914       static="false" final="true" visibility="protected"
   1915       deprecated="not deprecated">
   1916       <doc>
   1917       <![CDATA[@see Binder#currentStage()]]>
   1918       </doc>
   1919     </method>
   1920     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   1921       abstract="false" native="false" synchronized="false"
   1922       static="false" final="false" visibility="protected"
   1923       deprecated="not deprecated">
   1924       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   1925       <doc>
   1926       <![CDATA[@see Binder#getMembersInjector(Class)]]>
   1927       </doc>
   1928     </method>
   1929     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   1930       abstract="false" native="false" synchronized="false"
   1931       static="false" final="false" visibility="protected"
   1932       deprecated="not deprecated">
   1933       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   1934       <doc>
   1935       <![CDATA[@see Binder#getMembersInjector(TypeLiteral)]]>
   1936       </doc>
   1937     </method>
   1938     <method name="bindListener"
   1939       abstract="false" native="false" synchronized="false"
   1940       static="false" final="false" visibility="protected"
   1941       deprecated="not deprecated">
   1942       <param name="typeMatcher" type="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"/>
   1943       <param name="listener" type="com.google.inject.spi.TypeListener"/>
   1944       <doc>
   1945       <![CDATA[@see Binder#bindListener(com.google.inject.matcher.Matcher, com.google.inject.spi.TypeListener)]]>
   1946       </doc>
   1947     </method>
   1948     <doc>
   1949     <![CDATA[A module whose configuration information is hidden from its environment by default. Only bindings
   1950  that are explicitly exposed will be available to other modules and to the users of the injector.
   1951  This module may expose the bindings it creates and the bindings of the modules it installs.
   1952 
   1953  <p>A private module can be nested within a regular module or within another private module using
   1954  {@link Binder#install install()}.  Its bindings live in a new environment that inherits bindings,
   1955  type converters, scopes, and interceptors from the surrounding ("parent") environment.  When you
   1956  nest multiple private modules, the result is a tree of environments where the injector's
   1957  environment is the root.
   1958 
   1959  <p>Guice EDSL bindings can be exposed with {@link #expose(Class) expose()}. {@literal @}{@link
   1960  com.google.inject.Provides Provides} bindings can be exposed with the {@literal @}{@link
   1961  Exposed} annotation:
   1962 
   1963  <pre>
   1964  public class FooBarBazModule extends PrivateModule {
   1965    protected void configure() {
   1966      bind(Foo.class).to(RealFoo.class);
   1967      expose(Foo.class);
   1968 
   1969      install(new TransactionalBarModule());
   1970      expose(Bar.class).annotatedWith(Transactional.class);
   1971 
   1972      bind(SomeImplementationDetail.class);
   1973      install(new MoreImplementationDetailsModule());
   1974    }
   1975 
   1976    {@literal @}Provides {@literal @}Exposed
   1977    public Baz provideBaz() {
   1978      return new SuperBaz();
   1979    }
   1980  }
   1981  </pre>
   1982 
   1983  <p>Private modules are implemented using {@link Injector#createChildInjector(Module[]) parent
   1984  injectors}. When it can satisfy their dependencies, just-in-time bindings will be created in the
   1985  root environment. Such bindings are shared among all environments in the tree.
   1986  
   1987  <p>The scope of a binding is constrained to its environment. A singleton bound in a private
   1988  module will be unique to its environment. But a binding for the same type in a different private
   1989  module will yield a different instance.
   1990 
   1991  <p>A shared binding that injects the {@code Injector} gets the root injector, which only has
   1992  access to bindings in the root environment. An explicit binding that injects the {@code Injector}
   1993  gets access to all bindings in the child environment.
   1994 
   1995  <p>To promote a just-in-time binding to an explicit binding, bind it:
   1996  <pre>
   1997    bind(FooImpl.class);
   1998  </pre>
   1999 
   2000  @author jessewilson (a] google.com (Jesse Wilson)
   2001  @since 2.0]]>
   2002     </doc>
   2003   </class>
   2004   <!-- end class com.google.inject.PrivateModule -->
   2005   <!-- start class com.google.inject.ProvidedBy -->
   2006   <class name="ProvidedBy"    abstract="true"
   2007     static="false" final="false" visibility="public"
   2008     deprecated="not deprecated">
   2009     <implements name="java.lang.annotation.Annotation"/>
   2010     <doc>
   2011     <![CDATA[A pointer to the default provider type for a type.
   2012 
   2013  @author crazybob (a] google.com (Bob Lee)]]>
   2014     </doc>
   2015   </class>
   2016   <!-- end class com.google.inject.ProvidedBy -->
   2017   <!-- start interface com.google.inject.Provider -->
   2018   <interface name="Provider"    abstract="true"
   2019     static="false" final="false" visibility="public"
   2020     deprecated="not deprecated">
   2021     <method name="get" return="T"
   2022       abstract="false" native="false" synchronized="false"
   2023       static="false" final="false" visibility="public"
   2024       deprecated="not deprecated">
   2025       <doc>
   2026       <![CDATA[Provides an instance of {@code T}. Must never return {@code null}.
   2027 
   2028  @throws OutOfScopeException when an attempt is made to access a scoped object while the scope
   2029      in question is not currently active
   2030  @throws ProvisionException if an instance cannot be provided. Such exceptions include messages
   2031      and throwables to describe why provision failed.]]>
   2032       </doc>
   2033     </method>
   2034     <doc>
   2035     <![CDATA[An object capable of providing instances of type {@code T}. Providers are used in numerous ways
   2036  by Guice:
   2037 
   2038  <ul>
   2039  <li>When the default means for obtaining instances (an injectable or parameterless constructor)
   2040  is insufficient for a particular binding, the module can specify a custom {@code Provider}
   2041  instead, to control exactly how Guice creates or obtains instances for the binding.
   2042 
   2043  <li>An implementation class may always choose to have a {@code Provider<T>} instance injected,
   2044  rather than having a {@code T} injected directly.  This may give you access to multiple
   2045  instances, instances you wish to safely mutate and discard, instances which are out of scope
   2046  (e.g. using a {@code @RequestScoped} object from within a {@code @SessionScoped} object), or
   2047  instances that will be initialized lazily.
   2048 
   2049  <li>A custom {@link Scope} is implemented as a decorator of {@code Provider<T>}, which decides
   2050  when to delegate to the backing provider and when to provide the instance some other way.
   2051 
   2052  <li>The {@link Injector} offers access to the {@code Provider<T>} it uses to fulfill requests
   2053  for a given key, via the {@link Injector#getProvider} methods.
   2054  </ul>
   2055 
   2056  @param <T> the type of object this provides
   2057 
   2058  @author crazybob (a] google.com (Bob Lee)]]>
   2059     </doc>
   2060   </interface>
   2061   <!-- end interface com.google.inject.Provider -->
   2062   <!-- start class com.google.inject.Provides -->
   2063   <class name="Provides"    abstract="true"
   2064     static="false" final="false" visibility="public"
   2065     deprecated="not deprecated">
   2066     <implements name="java.lang.annotation.Annotation"/>
   2067     <doc>
   2068     <![CDATA[Annotates methods of a {@link Module} to create a provider method binding. The method's return
   2069  type is bound to it's returned value. Guice will pass dependencies to the method as parameters.
   2070 
   2071  @author crazybob (a] google.com (Bob Lee)
   2072  @since 2.0]]>
   2073     </doc>
   2074   </class>
   2075   <!-- end class com.google.inject.Provides -->
   2076   <!-- start class com.google.inject.ProvisionException -->
   2077   <class name="ProvisionException" extends="java.lang.RuntimeException"
   2078     abstract="false"
   2079     static="false" final="true" visibility="public"
   2080     deprecated="not deprecated">
   2081     <constructor name="ProvisionException" type="java.lang.Iterable&lt;com.google.inject.spi.Message&gt;"
   2082       static="false" final="false" visibility="public"
   2083       deprecated="not deprecated">
   2084       <doc>
   2085       <![CDATA[Creates a ConfigurationException containing {@code messages}.]]>
   2086       </doc>
   2087     </constructor>
   2088     <constructor name="ProvisionException" type="java.lang.String, java.lang.Throwable"
   2089       static="false" final="false" visibility="public"
   2090       deprecated="not deprecated">
   2091     </constructor>
   2092     <constructor name="ProvisionException" type="java.lang.String"
   2093       static="false" final="false" visibility="public"
   2094       deprecated="not deprecated">
   2095     </constructor>
   2096     <method name="getErrorMessages" return="java.util.Collection&lt;com.google.inject.spi.Message&gt;"
   2097       abstract="false" native="false" synchronized="false"
   2098       static="false" final="false" visibility="public"
   2099       deprecated="not deprecated">
   2100       <doc>
   2101       <![CDATA[Returns messages for the errors that caused this exception.]]>
   2102       </doc>
   2103     </method>
   2104     <method name="getMessage" return="java.lang.String"
   2105       abstract="false" native="false" synchronized="false"
   2106       static="false" final="false" visibility="public"
   2107       deprecated="not deprecated">
   2108     </method>
   2109     <doc>
   2110     <![CDATA[Indicates that there was a runtime failure while providing an instance.
   2111 
   2112  @author kevinb (a] google.com (Kevin Bourrillion)
   2113  @author jessewilson (a] google.com (Jesse Wilson)
   2114  @since 2.0]]>
   2115     </doc>
   2116   </class>
   2117   <!-- end class com.google.inject.ProvisionException -->
   2118   <!-- start interface com.google.inject.Scope -->
   2119   <interface name="Scope"    abstract="true"
   2120     static="false" final="false" visibility="public"
   2121     deprecated="not deprecated">
   2122     <method name="scope" return="com.google.inject.Provider&lt;T&gt;"
   2123       abstract="false" native="false" synchronized="false"
   2124       static="false" final="false" visibility="public"
   2125       deprecated="not deprecated">
   2126       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   2127       <param name="unscoped" type="com.google.inject.Provider&lt;T&gt;"/>
   2128       <doc>
   2129       <![CDATA[Scopes a provider. The returned provider returns objects from this scope.
   2130  If an object does not exist in this scope, the provider can use the given
   2131  unscoped provider to retrieve one.
   2132 
   2133  <p>Scope implementations are strongly encouraged to override
   2134  {@link Object#toString} in the returned provider and include the backing
   2135  provider's {@code toString()} output.
   2136 
   2137  @param key binding key
   2138  @param unscoped locates an instance when one doesn't already exist in this
   2139   scope.
   2140  @return a new provider which only delegates to the given unscoped provider
   2141   when an instance of the requested object doesn't already exist in this
   2142   scope]]>
   2143       </doc>
   2144     </method>
   2145     <method name="toString" return="java.lang.String"
   2146       abstract="false" native="false" synchronized="false"
   2147       static="false" final="false" visibility="public"
   2148       deprecated="not deprecated">
   2149       <doc>
   2150       <![CDATA[A short but useful description of this scope.  For comparison, the standard
   2151  scopes that ship with guice use the descriptions
   2152  {@code "Scopes.SINGLETON"}, {@code "ServletScopes.SESSION"} and
   2153  {@code "ServletScopes.REQUEST"}.]]>
   2154       </doc>
   2155     </method>
   2156     <doc>
   2157     <![CDATA[A scope is a level of visibility that instances provided by Guice may have.
   2158  By default, an instance created by the {@link Injector} has <i>no scope</i>,
   2159  meaning it has no state from the framework's perspective -- the
   2160  {@code Injector} creates it, injects it once into the class that required it,
   2161  and then immediately forgets it. Associating a scope with a particular
   2162  binding allows the created instance to be "remembered" and possibly used
   2163  again for other injections.
   2164 
   2165  <p>An example of a scope is {@link Scopes#SINGLETON}.
   2166 
   2167  @author crazybob (a] google.com (Bob Lee)]]>
   2168     </doc>
   2169   </interface>
   2170   <!-- end interface com.google.inject.Scope -->
   2171   <!-- start class com.google.inject.ScopeAnnotation -->
   2172   <class name="ScopeAnnotation"    abstract="true"
   2173     static="false" final="false" visibility="public"
   2174     deprecated="not deprecated">
   2175     <implements name="java.lang.annotation.Annotation"/>
   2176     <doc>
   2177     <![CDATA[Annotates annotations which are used for scoping. Only one such annotation
   2178  may apply to a single implementation class. You must also annotate scope
   2179  annotations with {@code @Retention(RUNTIME)}. For example:
   2180 
   2181  <pre>
   2182    {@code @}Retention(RUNTIME)
   2183    {@code @}Target(TYPE)
   2184    {@code @}ScopeAnnotation
   2185    public {@code @}interface SessionScoped {}
   2186  </pre>
   2187 
   2188  @author crazybob (a] google.com (Bob Lee)]]>
   2189     </doc>
   2190   </class>
   2191   <!-- end class com.google.inject.ScopeAnnotation -->
   2192   <!-- start class com.google.inject.Scopes -->
   2193   <class name="Scopes" extends="java.lang.Object"
   2194     abstract="false"
   2195     static="false" final="false" visibility="public"
   2196     deprecated="not deprecated">
   2197     <field name="SINGLETON" type="com.google.inject.Scope"
   2198       transient="false" volatile="false"
   2199       static="true" final="true" visibility="public"
   2200       deprecated="not deprecated">
   2201       <doc>
   2202       <![CDATA[One instance per {@link Injector}. Also see {@code @}{@link Singleton}.]]>
   2203       </doc>
   2204     </field>
   2205     <field name="NO_SCOPE" type="com.google.inject.Scope"
   2206       transient="false" volatile="false"
   2207       static="true" final="true" visibility="public"
   2208       deprecated="not deprecated">
   2209       <doc>
   2210       <![CDATA[No scope; the same as not applying any scope at all.  Each time the
   2211  Injector obtains an instance of an object with "no scope", it injects this
   2212  instance then immediately forgets it.  When the next request for the same
   2213  binding arrives it will need to obtain the instance over again.
   2214 
   2215  <p>This exists only in case a class has been annotated with a scope
   2216  annotation such as {@link Singleton @Singleton}, and you need to override
   2217  this to "no scope" in your binding.
   2218 
   2219  @since 2.0]]>
   2220       </doc>
   2221     </field>
   2222     <doc>
   2223     <![CDATA[Built-in scope implementations.
   2224 
   2225  @author crazybob (a] google.com (Bob Lee)]]>
   2226     </doc>
   2227   </class>
   2228   <!-- end class com.google.inject.Scopes -->
   2229   <!-- start class com.google.inject.Singleton -->
   2230   <class name="Singleton"    abstract="true"
   2231     static="false" final="false" visibility="public"
   2232     deprecated="not deprecated">
   2233     <implements name="java.lang.annotation.Annotation"/>
   2234     <doc>
   2235     <![CDATA[Apply this to implementation classes when you want only one instance
   2236  (per {@link Injector}) to be reused for all injections for that binding.
   2237 
   2238  @author crazybob (a] google.com (Bob Lee)]]>
   2239     </doc>
   2240   </class>
   2241   <!-- end class com.google.inject.Singleton -->
   2242   <!-- start class com.google.inject.Stage -->
   2243   <class name="Stage" extends="java.lang.Enum&lt;com.google.inject.Stage&gt;"
   2244     abstract="false"
   2245     static="false" final="true" visibility="public"
   2246     deprecated="not deprecated">
   2247     <method name="values" return="com.google.inject.Stage[]"
   2248       abstract="false" native="false" synchronized="false"
   2249       static="true" final="false" visibility="public"
   2250       deprecated="not deprecated">
   2251     </method>
   2252     <method name="valueOf" return="com.google.inject.Stage"
   2253       abstract="false" native="false" synchronized="false"
   2254       static="true" final="false" visibility="public"
   2255       deprecated="not deprecated">
   2256       <param name="name" type="java.lang.String"/>
   2257     </method>
   2258     <doc>
   2259     <![CDATA[The stage we're running in.
   2260 
   2261  @author crazybob (a] google.com (Bob Lee)]]>
   2262     </doc>
   2263   </class>
   2264   <!-- end class com.google.inject.Stage -->
   2265   <!-- start class com.google.inject.TypeLiteral -->
   2266   <class name="TypeLiteral" extends="java.lang.Object"
   2267     abstract="false"
   2268     static="false" final="false" visibility="public"
   2269     deprecated="not deprecated">
   2270     <constructor name="TypeLiteral"
   2271       static="false" final="false" visibility="protected"
   2272       deprecated="not deprecated">
   2273       <doc>
   2274       <![CDATA[Constructs a new type literal. Derives represented class from type
   2275  parameter.
   2276 
   2277  <p>Clients create an empty anonymous subclass. Doing so embeds the type
   2278  parameter in the anonymous class's type hierarchy so we can reconstitute it
   2279  at runtime despite erasure.]]>
   2280       </doc>
   2281     </constructor>
   2282     <method name="getRawType" return="java.lang.Class&lt;? super T&gt;"
   2283       abstract="false" native="false" synchronized="false"
   2284       static="false" final="true" visibility="public"
   2285       deprecated="not deprecated">
   2286       <doc>
   2287       <![CDATA[Returns the raw (non-generic) type for this type.
   2288  
   2289  @since 2.0]]>
   2290       </doc>
   2291     </method>
   2292     <method name="getType" return="java.lang.reflect.Type"
   2293       abstract="false" native="false" synchronized="false"
   2294       static="false" final="true" visibility="public"
   2295       deprecated="not deprecated">
   2296       <doc>
   2297       <![CDATA[Gets underlying {@code Type} instance.]]>
   2298       </doc>
   2299     </method>
   2300     <method name="hashCode" return="int"
   2301       abstract="false" native="false" synchronized="false"
   2302       static="false" final="true" visibility="public"
   2303       deprecated="not deprecated">
   2304     </method>
   2305     <method name="equals" return="boolean"
   2306       abstract="false" native="false" synchronized="false"
   2307       static="false" final="true" visibility="public"
   2308       deprecated="not deprecated">
   2309       <param name="o" type="java.lang.Object"/>
   2310     </method>
   2311     <method name="toString" return="java.lang.String"
   2312       abstract="false" native="false" synchronized="false"
   2313       static="false" final="true" visibility="public"
   2314       deprecated="not deprecated">
   2315     </method>
   2316     <method name="get" return="com.google.inject.TypeLiteral&lt;?&gt;"
   2317       abstract="false" native="false" synchronized="false"
   2318       static="true" final="false" visibility="public"
   2319       deprecated="not deprecated">
   2320       <param name="type" type="java.lang.reflect.Type"/>
   2321       <doc>
   2322       <![CDATA[Gets type literal for the given {@code Type} instance.]]>
   2323       </doc>
   2324     </method>
   2325     <method name="get" return="com.google.inject.TypeLiteral&lt;T&gt;"
   2326       abstract="false" native="false" synchronized="false"
   2327       static="true" final="false" visibility="public"
   2328       deprecated="not deprecated">
   2329       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   2330       <doc>
   2331       <![CDATA[Gets type literal for the given {@code Class} instance.]]>
   2332       </doc>
   2333     </method>
   2334     <method name="getSupertype" return="com.google.inject.TypeLiteral&lt;?&gt;"
   2335       abstract="false" native="false" synchronized="false"
   2336       static="false" final="false" visibility="public"
   2337       deprecated="not deprecated">
   2338       <param name="supertype" type="java.lang.Class&lt;?&gt;"/>
   2339       <doc>
   2340       <![CDATA[Returns the generic form of {@code supertype}. For example, if this is {@code
   2341  ArrayList<String>}, this returns {@code Iterable<String>} given the input {@code
   2342  Iterable.class}.
   2343 
   2344  @param supertype a superclass of, or interface implemented by, this.
   2345  @since 2.0]]>
   2346       </doc>
   2347     </method>
   2348     <method name="getFieldType" return="com.google.inject.TypeLiteral&lt;?&gt;"
   2349       abstract="false" native="false" synchronized="false"
   2350       static="false" final="false" visibility="public"
   2351       deprecated="not deprecated">
   2352       <param name="field" type="java.lang.reflect.Field"/>
   2353       <doc>
   2354       <![CDATA[Returns the resolved generic type of {@code field}.
   2355 
   2356  @param field a field defined by this or any superclass.
   2357  @since 2.0]]>
   2358       </doc>
   2359     </method>
   2360     <method name="getParameterTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
   2361       abstract="false" native="false" synchronized="false"
   2362       static="false" final="false" visibility="public"
   2363       deprecated="not deprecated">
   2364       <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
   2365       <doc>
   2366       <![CDATA[Returns the resolved generic parameter types of {@code methodOrConstructor}.
   2367 
   2368  @param methodOrConstructor a method or constructor defined by this or any supertype.
   2369  @since 2.0]]>
   2370       </doc>
   2371     </method>
   2372     <method name="getExceptionTypes" return="java.util.List&lt;com.google.inject.TypeLiteral&lt;?&gt;&gt;"
   2373       abstract="false" native="false" synchronized="false"
   2374       static="false" final="false" visibility="public"
   2375       deprecated="not deprecated">
   2376       <param name="methodOrConstructor" type="java.lang.reflect.Member"/>
   2377       <doc>
   2378       <![CDATA[Returns the resolved generic exception types thrown by {@code constructor}.
   2379 
   2380  @param methodOrConstructor a method or constructor defined by this or any supertype.
   2381  @since 2.0]]>
   2382       </doc>
   2383     </method>
   2384     <method name="getReturnType" return="com.google.inject.TypeLiteral&lt;?&gt;"
   2385       abstract="false" native="false" synchronized="false"
   2386       static="false" final="false" visibility="public"
   2387       deprecated="not deprecated">
   2388       <param name="method" type="java.lang.reflect.Method"/>
   2389       <doc>
   2390       <![CDATA[Returns the resolved generic return type of {@code method}.
   2391 
   2392  @param method a method defined by this or any supertype.
   2393  @since 2.0]]>
   2394       </doc>
   2395     </method>
   2396     <doc>
   2397     <![CDATA[Represents a generic type {@code T}. Java doesn't yet provide a way to
   2398  represent generic types, so this class does. Forces clients to create a
   2399  subclass of this class which enables retrieval the type information even at
   2400  runtime.
   2401 
   2402  <p>For example, to create a type literal for {@code List<String>}, you can
   2403  create an empty anonymous inner class:
   2404 
   2405  <p>
   2406  {@code TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};}
   2407 
   2408  <p>This syntax cannot be used to create type literals that have wildcard
   2409  parameters, such as {@code Class<?>} or {@code List<? extends CharSequence>}.
   2410  Such type literals must be constructed programatically, either by {@link
   2411  Method#getGenericReturnType extracting types from members} or by using the
   2412  {@link Types} factory class.
   2413 
   2414  <p>Along with modeling generic types, this class can resolve type parameters.
   2415  For example, to figure out what type {@code keySet()} returns on a {@code
   2416  Map<Integer, String>}, use this code:<pre>   {@code
   2417 
   2418    TypeLiteral<Map<Integer, String>> mapType
   2419        = new TypeLiteral<Map<Integer, String>>() {};
   2420    TypeLiteral<?> keySetType
   2421        = mapType.getReturnType(Map.class.getMethod("keySet"));
   2422    System.out.println(keySetType); // prints "Set<Integer>"}</pre>
   2423 
   2424  @author crazybob (a] google.com (Bob Lee)
   2425  @author jessewilson (a] google.com (Jesse Wilson)]]>
   2426     </doc>
   2427   </class>
   2428   <!-- end class com.google.inject.TypeLiteral -->
   2429 </package>
   2430 <package name="com.google.inject.assistedinject">
   2431   <!-- start class com.google.inject.assistedinject.Assisted -->
   2432   <class name="Assisted"    abstract="true"
   2433     static="false" final="false" visibility="public"
   2434     deprecated="not deprecated">
   2435     <implements name="java.lang.annotation.Annotation"/>
   2436     <doc>
   2437     <![CDATA[Annotates an injected parameter or field whose value comes from an argument to a factory method.
   2438 
   2439  @author jmourits (a] google.com (Jerome Mourits)
   2440  @author jessewilson (a] google.com (Jesse Wilson)]]>
   2441     </doc>
   2442   </class>
   2443   <!-- end class com.google.inject.assistedinject.Assisted -->
   2444   <!-- start class com.google.inject.assistedinject.AssistedInject -->
   2445   <class name="AssistedInject"    abstract="true"
   2446     static="false" final="false" visibility="public"
   2447     deprecated="{@link FactoryProvider} now works better with the standard {@literal @Inject}
   2448      annotation. When using that annotation, parameters are matched by name and type rather than
   2449      by position. In addition, values that use the standard {@literal @Inject} constructor
   2450      annotation are eligible for method interception.">
   2451     <implements name="java.lang.annotation.Annotation"/>
   2452     <doc>
   2453     <![CDATA[<p>Constructors annotated with {@code @AssistedInject} indicate that they can be instantiated by
   2454  the {@link FactoryProvider}. Each constructor must exactly match one corresponding factory method
   2455  within the factory interface.
   2456  
   2457  <p>Constructor parameters must be either supplied by the factory interface and marked with
   2458  <code>@Assisted</code>, or they must be injectable.
   2459  
   2460  @deprecated {@link FactoryProvider} now works better with the standard {@literal @Inject}
   2461      annotation. When using that annotation, parameters are matched by name and type rather than
   2462      by position. In addition, values that use the standard {@literal @Inject} constructor
   2463      annotation are eligible for method interception.
   2464 
   2465  @author jmourits (a] google.com (Jerome Mourits)
   2466  @author jessewilson (a] google.com (Jesse Wilson)]]>
   2467     </doc>
   2468   </class>
   2469   <!-- end class com.google.inject.assistedinject.AssistedInject -->
   2470   <!-- start class com.google.inject.assistedinject.FactoryProvider -->
   2471   <class name="FactoryProvider" extends="java.lang.Object"
   2472     abstract="false"
   2473     static="false" final="false" visibility="public"
   2474     deprecated="not deprecated">
   2475     <implements name="com.google.inject.Provider&lt;F&gt;"/>
   2476     <implements name="com.google.inject.spi.HasDependencies"/>
   2477     <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
   2478       abstract="false" native="false" synchronized="false"
   2479       static="true" final="false" visibility="public"
   2480       deprecated="not deprecated">
   2481       <param name="factoryType" type="java.lang.Class&lt;F&gt;"/>
   2482       <param name="implementationType" type="java.lang.Class&lt;?&gt;"/>
   2483     </method>
   2484     <method name="newFactory" return="com.google.inject.Provider&lt;F&gt;"
   2485       abstract="false" native="false" synchronized="false"
   2486       static="true" final="false" visibility="public"
   2487       deprecated="not deprecated">
   2488       <param name="factoryType" type="com.google.inject.TypeLiteral&lt;F&gt;"/>
   2489       <param name="implementationType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   2490     </method>
   2491     <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
   2492       abstract="false" native="false" synchronized="false"
   2493       static="false" final="false" visibility="public"
   2494       deprecated="not deprecated">
   2495     </method>
   2496     <method name="get" return="F"
   2497       abstract="false" native="false" synchronized="false"
   2498       static="false" final="false" visibility="public"
   2499       deprecated="not deprecated">
   2500     </method>
   2501     <doc>
   2502     <![CDATA[Provides a factory that combines the caller's arguments with injector-supplied values to
   2503  construct objects.
   2504 
   2505  <h3>Defining a factory</h3>
   2506  Create an interface whose methods return the constructed type, or any of its supertypes. The
   2507  method's parameters are the arguments required to build the constructed type.
   2508  <pre>public interface PaymentFactory {
   2509    Payment create(Date startDate, Money amount);
   2510  }</pre>
   2511  You can name your factory methods whatever you like, such as <i>create</i>, <i>createPayment</i>
   2512  or <i>newPayment</i>.
   2513 
   2514  <h3>Creating a type that accepts factory parameters</h3>
   2515  {@code constructedType} is a concrete class with an {@literal @}{@link Inject}-annotated
   2516  constructor. In addition to injector-supplied parameters, the constructor should have
   2517  parameters that match each of the factory method's parameters. Each factory-supplied parameter
   2518  requires an {@literal @}{@link Assisted} annotation. This serves to document that the parameter
   2519  is not bound by your application's modules.
   2520  <pre>public class RealPayment implements Payment {
   2521    {@literal @}Inject
   2522    public RealPayment(
   2523       CreditService creditService,
   2524       AuthService authService,
   2525       <strong>{@literal @}Assisted Date startDate</strong>,
   2526       <strong>{@literal @}Assisted Money amount</strong>) {
   2527      ...
   2528    }
   2529  }</pre>
   2530  Any parameter that permits a null value should also be annotated {@code @Nullable}.
   2531 
   2532  <h3>Configuring factories</h3>
   2533  In your {@link com.google.inject.Module module}, bind the factory interface to the returned
   2534  factory:
   2535  <pre>bind(PaymentFactory.class).toProvider(
   2536      FactoryProvider.newFactory(PaymentFactory.class, RealPayment.class));</pre>
   2537  As a side-effect of this binding, Guice will inject the factory to initialize it for use. The
   2538  factory cannot be used until the injector has been initialized.
   2539 
   2540  <h3>Using the factory</h3>
   2541  Inject your factory into your application classes. When you use the factory, your arguments
   2542  will be combined with values from the injector to construct an instance.
   2543  <pre>public class PaymentAction {
   2544    {@literal @}Inject private PaymentFactory paymentFactory;
   2545 
   2546    public void doPayment(Money amount) {
   2547      Payment payment = paymentFactory.create(new Date(), amount);
   2548      payment.apply();
   2549    }
   2550  }</pre>
   2551 
   2552  <h3>Making parameter types distinct</h3>
   2553  The types of the factory method's parameters must be distinct. To use multiple parameters of
   2554  the same type, use a named {@literal @}{@link Assisted} annotation to disambiguate the
   2555  parameters. The names must be applied to the factory method's parameters:
   2556 
   2557  <pre>public interface PaymentFactory {
   2558    Payment create(
   2559        <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
   2560        <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
   2561        Money amount);
   2562  } </pre>
   2563  ...and to the concrete type's constructor parameters:
   2564  <pre>public class RealPayment implements Payment {
   2565    {@literal @}Inject
   2566    public RealPayment(
   2567       CreditService creditService,
   2568       AuthService authService,
   2569       <strong>{@literal @}Assisted("startDate")</strong> Date startDate,
   2570       <strong>{@literal @}Assisted("dueDate")</strong> Date dueDate,
   2571       <strong>{@literal @}Assisted</strong> Money amount) {
   2572      ...
   2573    }
   2574  }</pre>
   2575 
   2576  <h3>Values are created by Guice</h3>
   2577  Returned factories use child injectors to create values. The values are eligible for method
   2578  interception. In addition, {@literal @}{@literal Inject} members will be injected before they are
   2579  returned.
   2580 
   2581  <h3>Backwards compatibility using {@literal @}AssistedInject</h3>
   2582  Instead of the {@literal @}Inject annotation, you may annotate the constructed classes with
   2583  {@literal @}{@link AssistedInject}. This triggers a limited backwards-compatability mode.
   2584 
   2585  <p>Instead of matching factory method arguments to constructor parameters using their names, the
   2586  <strong>parameters are matched by their order</strong>. The first factory method argument is
   2587  used for the first {@literal @}Assisted constructor parameter, etc.. Annotation names have no
   2588  effect.
   2589 
   2590  <p>Returned values are <strong>not created by Guice</strong>. These types are not eligible for
   2591  method interception. They do receive post-construction member injection.
   2592 
   2593  @param <F> The factory interface
   2594 
   2595  @author jmourits (a] google.com (Jerome Mourits)
   2596  @author jessewilson (a] google.com (Jesse Wilson)
   2597  @author dtm (a] google.com (Daniel Martin)]]>
   2598     </doc>
   2599   </class>
   2600   <!-- end class com.google.inject.assistedinject.FactoryProvider -->
   2601 </package>
   2602 <package name="com.google.inject.binder">
   2603   <!-- start interface com.google.inject.binder.AnnotatedBindingBuilder -->
   2604   <interface name="AnnotatedBindingBuilder"    abstract="true"
   2605     static="false" final="false" visibility="public"
   2606     deprecated="not deprecated">
   2607     <implements name="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"/>
   2608     <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
   2609       abstract="false" native="false" synchronized="false"
   2610       static="false" final="false" visibility="public"
   2611       deprecated="not deprecated">
   2612       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   2613       <doc>
   2614       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2615       </doc>
   2616     </method>
   2617     <method name="annotatedWith" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
   2618       abstract="false" native="false" synchronized="false"
   2619       static="false" final="false" visibility="public"
   2620       deprecated="not deprecated">
   2621       <param name="annotation" type="java.lang.annotation.Annotation"/>
   2622       <doc>
   2623       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2624       </doc>
   2625     </method>
   2626     <doc>
   2627     <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2628 
   2629  @author crazybob (a] google.com (Bob Lee)]]>
   2630     </doc>
   2631   </interface>
   2632   <!-- end interface com.google.inject.binder.AnnotatedBindingBuilder -->
   2633   <!-- start interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
   2634   <interface name="AnnotatedConstantBindingBuilder"    abstract="true"
   2635     static="false" final="false" visibility="public"
   2636     deprecated="not deprecated">
   2637     <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
   2638       abstract="false" native="false" synchronized="false"
   2639       static="false" final="false" visibility="public"
   2640       deprecated="not deprecated">
   2641       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   2642       <doc>
   2643       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2644       </doc>
   2645     </method>
   2646     <method name="annotatedWith" return="com.google.inject.binder.ConstantBindingBuilder"
   2647       abstract="false" native="false" synchronized="false"
   2648       static="false" final="false" visibility="public"
   2649       deprecated="not deprecated">
   2650       <param name="annotation" type="java.lang.annotation.Annotation"/>
   2651       <doc>
   2652       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2653       </doc>
   2654     </method>
   2655     <doc>
   2656     <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2657 
   2658  @author crazybob (a] google.com (Bob Lee)]]>
   2659     </doc>
   2660   </interface>
   2661   <!-- end interface com.google.inject.binder.AnnotatedConstantBindingBuilder -->
   2662   <!-- start interface com.google.inject.binder.AnnotatedElementBuilder -->
   2663   <interface name="AnnotatedElementBuilder"    abstract="true"
   2664     static="false" final="false" visibility="public"
   2665     deprecated="not deprecated">
   2666     <method name="annotatedWith"
   2667       abstract="false" native="false" synchronized="false"
   2668       static="false" final="false" visibility="public"
   2669       deprecated="not deprecated">
   2670       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   2671       <doc>
   2672       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2673       </doc>
   2674     </method>
   2675     <method name="annotatedWith"
   2676       abstract="false" native="false" synchronized="false"
   2677       static="false" final="false" visibility="public"
   2678       deprecated="not deprecated">
   2679       <param name="annotation" type="java.lang.annotation.Annotation"/>
   2680       <doc>
   2681       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2682       </doc>
   2683     </method>
   2684     <doc>
   2685     <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2686 
   2687  @author jessewilson (a] google.com (Jesse Wilson)
   2688  @since 2.0]]>
   2689     </doc>
   2690   </interface>
   2691   <!-- end interface com.google.inject.binder.AnnotatedElementBuilder -->
   2692   <!-- start interface com.google.inject.binder.ConstantBindingBuilder -->
   2693   <interface name="ConstantBindingBuilder"    abstract="true"
   2694     static="false" final="false" visibility="public"
   2695     deprecated="not deprecated">
   2696     <method name="to"
   2697       abstract="false" native="false" synchronized="false"
   2698       static="false" final="false" visibility="public"
   2699       deprecated="not deprecated">
   2700       <param name="value" type="java.lang.String"/>
   2701       <doc>
   2702       <![CDATA[Binds constant to the given value.]]>
   2703       </doc>
   2704     </method>
   2705     <method name="to"
   2706       abstract="false" native="false" synchronized="false"
   2707       static="false" final="false" visibility="public"
   2708       deprecated="not deprecated">
   2709       <param name="value" type="int"/>
   2710       <doc>
   2711       <![CDATA[Binds constant to the given value.]]>
   2712       </doc>
   2713     </method>
   2714     <method name="to"
   2715       abstract="false" native="false" synchronized="false"
   2716       static="false" final="false" visibility="public"
   2717       deprecated="not deprecated">
   2718       <param name="value" type="long"/>
   2719       <doc>
   2720       <![CDATA[Binds constant to the given value.]]>
   2721       </doc>
   2722     </method>
   2723     <method name="to"
   2724       abstract="false" native="false" synchronized="false"
   2725       static="false" final="false" visibility="public"
   2726       deprecated="not deprecated">
   2727       <param name="value" type="boolean"/>
   2728       <doc>
   2729       <![CDATA[Binds constant to the given value.]]>
   2730       </doc>
   2731     </method>
   2732     <method name="to"
   2733       abstract="false" native="false" synchronized="false"
   2734       static="false" final="false" visibility="public"
   2735       deprecated="not deprecated">
   2736       <param name="value" type="double"/>
   2737       <doc>
   2738       <![CDATA[Binds constant to the given value.]]>
   2739       </doc>
   2740     </method>
   2741     <method name="to"
   2742       abstract="false" native="false" synchronized="false"
   2743       static="false" final="false" visibility="public"
   2744       deprecated="not deprecated">
   2745       <param name="value" type="float"/>
   2746       <doc>
   2747       <![CDATA[Binds constant to the given value.]]>
   2748       </doc>
   2749     </method>
   2750     <method name="to"
   2751       abstract="false" native="false" synchronized="false"
   2752       static="false" final="false" visibility="public"
   2753       deprecated="not deprecated">
   2754       <param name="value" type="short"/>
   2755       <doc>
   2756       <![CDATA[Binds constant to the given value.]]>
   2757       </doc>
   2758     </method>
   2759     <method name="to"
   2760       abstract="false" native="false" synchronized="false"
   2761       static="false" final="false" visibility="public"
   2762       deprecated="not deprecated">
   2763       <param name="value" type="char"/>
   2764       <doc>
   2765       <![CDATA[Binds constant to the given value.]]>
   2766       </doc>
   2767     </method>
   2768     <method name="to"
   2769       abstract="false" native="false" synchronized="false"
   2770       static="false" final="false" visibility="public"
   2771       deprecated="not deprecated">
   2772       <param name="value" type="java.lang.Class&lt;?&gt;"/>
   2773       <doc>
   2774       <![CDATA[Binds constant to the given value.]]>
   2775       </doc>
   2776     </method>
   2777     <method name="to"
   2778       abstract="false" native="false" synchronized="false"
   2779       static="false" final="false" visibility="public"
   2780       deprecated="not deprecated">
   2781       <param name="value" type="E extends java.lang.Enum&lt;E&gt;"/>
   2782       <doc>
   2783       <![CDATA[Binds constant to the given value.]]>
   2784       </doc>
   2785     </method>
   2786     <doc>
   2787     <![CDATA[Binds to a constant value.]]>
   2788     </doc>
   2789   </interface>
   2790   <!-- end interface com.google.inject.binder.ConstantBindingBuilder -->
   2791   <!-- start interface com.google.inject.binder.LinkedBindingBuilder -->
   2792   <interface name="LinkedBindingBuilder"    abstract="true"
   2793     static="false" final="false" visibility="public"
   2794     deprecated="not deprecated">
   2795     <implements name="com.google.inject.binder.ScopedBindingBuilder"/>
   2796     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   2797       abstract="false" native="false" synchronized="false"
   2798       static="false" final="false" visibility="public"
   2799       deprecated="not deprecated">
   2800       <param name="implementation" type="java.lang.Class&lt;? extends T&gt;"/>
   2801       <doc>
   2802       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2803       </doc>
   2804     </method>
   2805     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   2806       abstract="false" native="false" synchronized="false"
   2807       static="false" final="false" visibility="public"
   2808       deprecated="not deprecated">
   2809       <param name="implementation" type="com.google.inject.TypeLiteral&lt;? extends T&gt;"/>
   2810       <doc>
   2811       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2812       </doc>
   2813     </method>
   2814     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   2815       abstract="false" native="false" synchronized="false"
   2816       static="false" final="false" visibility="public"
   2817       deprecated="not deprecated">
   2818       <param name="targetKey" type="com.google.inject.Key&lt;? extends T&gt;"/>
   2819       <doc>
   2820       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2821       </doc>
   2822     </method>
   2823     <method name="toInstance"
   2824       abstract="false" native="false" synchronized="false"
   2825       static="false" final="false" visibility="public"
   2826       deprecated="not deprecated">
   2827       <param name="instance" type="T"/>
   2828       <doc>
   2829       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2830 
   2831  @see com.google.inject.Injector#injectMembers]]>
   2832       </doc>
   2833     </method>
   2834     <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
   2835       abstract="false" native="false" synchronized="false"
   2836       static="false" final="false" visibility="public"
   2837       deprecated="not deprecated">
   2838       <param name="provider" type="com.google.inject.Provider&lt;? extends T&gt;"/>
   2839       <doc>
   2840       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2841 
   2842  @see com.google.inject.Injector#injectMembers]]>
   2843       </doc>
   2844     </method>
   2845     <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
   2846       abstract="false" native="false" synchronized="false"
   2847       static="false" final="false" visibility="public"
   2848       deprecated="not deprecated">
   2849       <param name="providerType" type="java.lang.Class&lt;? extends com.google.inject.Provider&lt;? extends T&gt;&gt;"/>
   2850       <doc>
   2851       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2852       </doc>
   2853     </method>
   2854     <method name="toProvider" return="com.google.inject.binder.ScopedBindingBuilder"
   2855       abstract="false" native="false" synchronized="false"
   2856       static="false" final="false" visibility="public"
   2857       deprecated="not deprecated">
   2858       <param name="providerKey" type="com.google.inject.Key&lt;? extends com.google.inject.Provider&lt;? extends T&gt;&gt;"/>
   2859       <doc>
   2860       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2861       </doc>
   2862     </method>
   2863     <doc>
   2864     <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2865 
   2866  @author crazybob (a] google.com (Bob Lee)]]>
   2867     </doc>
   2868   </interface>
   2869   <!-- end interface com.google.inject.binder.LinkedBindingBuilder -->
   2870   <!-- start interface com.google.inject.binder.ScopedBindingBuilder -->
   2871   <interface name="ScopedBindingBuilder"    abstract="true"
   2872     static="false" final="false" visibility="public"
   2873     deprecated="not deprecated">
   2874     <method name="in"
   2875       abstract="false" native="false" synchronized="false"
   2876       static="false" final="false" visibility="public"
   2877       deprecated="not deprecated">
   2878       <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   2879       <doc>
   2880       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2881       </doc>
   2882     </method>
   2883     <method name="in"
   2884       abstract="false" native="false" synchronized="false"
   2885       static="false" final="false" visibility="public"
   2886       deprecated="not deprecated">
   2887       <param name="scope" type="com.google.inject.Scope"/>
   2888       <doc>
   2889       <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.]]>
   2890       </doc>
   2891     </method>
   2892     <method name="asEagerSingleton"
   2893       abstract="false" native="false" synchronized="false"
   2894       static="false" final="false" visibility="public"
   2895       deprecated="not deprecated">
   2896       <doc>
   2897       <![CDATA[Instructs the {@link com.google.inject.Injector} to eagerly initialize this
   2898  singleton-scoped binding upon creation. Useful for application
   2899  initialization logic.  See the EDSL examples at
   2900  {@link com.google.inject.Binder}.]]>
   2901       </doc>
   2902     </method>
   2903     <doc>
   2904     <![CDATA[See the EDSL examples at {@link com.google.inject.Binder}.
   2905 
   2906  @author crazybob (a] google.com (Bob Lee)]]>
   2907     </doc>
   2908   </interface>
   2909   <!-- end interface com.google.inject.binder.ScopedBindingBuilder -->
   2910 </package>
   2911 <package name="com.google.inject.jndi">
   2912   <!-- start class com.google.inject.jndi.JndiIntegration -->
   2913   <class name="JndiIntegration" extends="java.lang.Object"
   2914     abstract="false"
   2915     static="false" final="false" visibility="public"
   2916     deprecated="not deprecated">
   2917     <method name="fromJndi" return="com.google.inject.Provider&lt;T&gt;"
   2918       abstract="false" native="false" synchronized="false"
   2919       static="true" final="false" visibility="public"
   2920       deprecated="not deprecated">
   2921       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   2922       <param name="name" type="java.lang.String"/>
   2923       <doc>
   2924       <![CDATA[Creates a provider which looks up objects in JNDI using the given name.
   2925  Example usage:
   2926 
   2927  <pre>
   2928  bind(DataSource.class).toProvider(fromJndi(DataSource.class, "java:..."));
   2929  </pre>]]>
   2930       </doc>
   2931     </method>
   2932     <doc>
   2933     <![CDATA[Integrates Guice with JNDI. Requires a binding to 
   2934  {@link javax.naming.Context}.
   2935 
   2936  @author crazybob (a] google.com (Bob Lee)]]>
   2937     </doc>
   2938   </class>
   2939   <!-- end class com.google.inject.jndi.JndiIntegration -->
   2940 </package>
   2941 <package name="com.google.inject.matcher">
   2942   <!-- start class com.google.inject.matcher.AbstractMatcher -->
   2943   <class name="AbstractMatcher" extends="java.lang.Object"
   2944     abstract="true"
   2945     static="false" final="false" visibility="public"
   2946     deprecated="not deprecated">
   2947     <implements name="com.google.inject.matcher.Matcher&lt;T&gt;"/>
   2948     <constructor name="AbstractMatcher"
   2949       static="false" final="false" visibility="public"
   2950       deprecated="not deprecated">
   2951     </constructor>
   2952     <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
   2953       abstract="false" native="false" synchronized="false"
   2954       static="false" final="false" visibility="public"
   2955       deprecated="not deprecated">
   2956       <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
   2957     </method>
   2958     <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
   2959       abstract="false" native="false" synchronized="false"
   2960       static="false" final="false" visibility="public"
   2961       deprecated="not deprecated">
   2962       <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
   2963     </method>
   2964     <doc>
   2965     <![CDATA[Implements {@code and()} and {@code or()}.
   2966 
   2967  @author crazybob (a] google.com (Bob Lee)]]>
   2968     </doc>
   2969   </class>
   2970   <!-- end class com.google.inject.matcher.AbstractMatcher -->
   2971   <!-- start interface com.google.inject.matcher.Matcher -->
   2972   <interface name="Matcher"    abstract="true"
   2973     static="false" final="false" visibility="public"
   2974     deprecated="not deprecated">
   2975     <method name="matches" return="boolean"
   2976       abstract="false" native="false" synchronized="false"
   2977       static="false" final="false" visibility="public"
   2978       deprecated="not deprecated">
   2979       <param name="t" type="T"/>
   2980       <doc>
   2981       <![CDATA[Returns {@code true} if this matches {@code t}, {@code false} otherwise.]]>
   2982       </doc>
   2983     </method>
   2984     <method name="and" return="com.google.inject.matcher.Matcher&lt;T&gt;"
   2985       abstract="false" native="false" synchronized="false"
   2986       static="false" final="false" visibility="public"
   2987       deprecated="not deprecated">
   2988       <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
   2989       <doc>
   2990       <![CDATA[Returns a new matcher which returns {@code true} if both this and the
   2991  given matcher return {@code true}.]]>
   2992       </doc>
   2993     </method>
   2994     <method name="or" return="com.google.inject.matcher.Matcher&lt;T&gt;"
   2995       abstract="false" native="false" synchronized="false"
   2996       static="false" final="false" visibility="public"
   2997       deprecated="not deprecated">
   2998       <param name="other" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
   2999       <doc>
   3000       <![CDATA[Returns a new matcher which returns {@code true} if either this or the
   3001  given matcher return {@code true}.]]>
   3002       </doc>
   3003     </method>
   3004     <doc>
   3005     <![CDATA[Returns {@code true} or {@code false} for a given input.
   3006 
   3007  @author crazybob (a] google.com (Bob Lee)]]>
   3008     </doc>
   3009   </interface>
   3010   <!-- end interface com.google.inject.matcher.Matcher -->
   3011   <!-- start class com.google.inject.matcher.Matchers -->
   3012   <class name="Matchers" extends="java.lang.Object"
   3013     abstract="false"
   3014     static="false" final="false" visibility="public"
   3015     deprecated="not deprecated">
   3016     <method name="any" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
   3017       abstract="false" native="false" synchronized="false"
   3018       static="true" final="false" visibility="public"
   3019       deprecated="not deprecated">
   3020       <doc>
   3021       <![CDATA[Returns a matcher which matches any input.]]>
   3022       </doc>
   3023     </method>
   3024     <method name="not" return="com.google.inject.matcher.Matcher&lt;T&gt;"
   3025       abstract="false" native="false" synchronized="false"
   3026       static="true" final="false" visibility="public"
   3027       deprecated="not deprecated">
   3028       <param name="p" type="com.google.inject.matcher.Matcher&lt;? super T&gt;"/>
   3029       <doc>
   3030       <![CDATA[Inverts the given matcher.]]>
   3031       </doc>
   3032     </method>
   3033     <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
   3034       abstract="false" native="false" synchronized="false"
   3035       static="true" final="false" visibility="public"
   3036       deprecated="not deprecated">
   3037       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3038       <doc>
   3039       <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
   3040  with a given annotation.]]>
   3041       </doc>
   3042     </method>
   3043     <method name="annotatedWith" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.AnnotatedElement&gt;"
   3044       abstract="false" native="false" synchronized="false"
   3045       static="true" final="false" visibility="public"
   3046       deprecated="not deprecated">
   3047       <param name="annotation" type="java.lang.annotation.Annotation"/>
   3048       <doc>
   3049       <![CDATA[Returns a matcher which matches elements (methods, classes, etc.)
   3050  with a given annotation.]]>
   3051       </doc>
   3052     </method>
   3053     <method name="subclassesOf" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
   3054       abstract="false" native="false" synchronized="false"
   3055       static="true" final="false" visibility="public"
   3056       deprecated="not deprecated">
   3057       <param name="superclass" type="java.lang.Class&lt;?&gt;"/>
   3058       <doc>
   3059       <![CDATA[Returns a matcher which matches subclasses of the given type (as well as
   3060  the given type).]]>
   3061       </doc>
   3062     </method>
   3063     <method name="only" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
   3064       abstract="false" native="false" synchronized="false"
   3065       static="true" final="false" visibility="public"
   3066       deprecated="not deprecated">
   3067       <param name="value" type="java.lang.Object"/>
   3068       <doc>
   3069       <![CDATA[Returns a matcher which matches objects equal to the given object.]]>
   3070       </doc>
   3071     </method>
   3072     <method name="identicalTo" return="com.google.inject.matcher.Matcher&lt;java.lang.Object&gt;"
   3073       abstract="false" native="false" synchronized="false"
   3074       static="true" final="false" visibility="public"
   3075       deprecated="not deprecated">
   3076       <param name="value" type="java.lang.Object"/>
   3077       <doc>
   3078       <![CDATA[Returns a matcher which matches only the given object.]]>
   3079       </doc>
   3080     </method>
   3081     <method name="inPackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
   3082       abstract="false" native="false" synchronized="false"
   3083       static="true" final="false" visibility="public"
   3084       deprecated="not deprecated">
   3085       <param name="targetPackage" type="java.lang.Package"/>
   3086       <doc>
   3087       <![CDATA[Returns a matcher which matches classes in the given package. Packages are specific to their
   3088  classloader, so classes with the same package name may not have the same package at runtime.]]>
   3089       </doc>
   3090     </method>
   3091     <method name="inSubpackage" return="com.google.inject.matcher.Matcher&lt;java.lang.Class&gt;"
   3092       abstract="false" native="false" synchronized="false"
   3093       static="true" final="false" visibility="public"
   3094       deprecated="not deprecated">
   3095       <param name="targetPackageName" type="java.lang.String"/>
   3096       <doc>
   3097       <![CDATA[Returns a matcher which matches classes in the given package and its subpackages. Unlike
   3098  {@link #inPackage(Package) inPackage()}, this matches classes from any classloader.
   3099  
   3100  @since 2.0]]>
   3101       </doc>
   3102     </method>
   3103     <method name="returns" return="com.google.inject.matcher.Matcher&lt;java.lang.reflect.Method&gt;"
   3104       abstract="false" native="false" synchronized="false"
   3105       static="true" final="false" visibility="public"
   3106       deprecated="not deprecated">
   3107       <param name="returnType" type="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"/>
   3108       <doc>
   3109       <![CDATA[Returns a matcher which matches methods with matching return types.]]>
   3110       </doc>
   3111     </method>
   3112     <doc>
   3113     <![CDATA[Matcher implementations. Supports matching classes and methods.
   3114 
   3115  @author crazybob (a] google.com (Bob Lee)]]>
   3116     </doc>
   3117   </class>
   3118   <!-- end class com.google.inject.matcher.Matchers -->
   3119 </package>
   3120 <package name="com.google.inject.multibindings">
   3121   <!-- start class com.google.inject.multibindings.MapBinder -->
   3122   <class name="MapBinder" extends="java.lang.Object"
   3123     abstract="true"
   3124     static="false" final="false" visibility="public"
   3125     deprecated="not deprecated">
   3126     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3127       abstract="false" native="false" synchronized="false"
   3128       static="true" final="false" visibility="public"
   3129       deprecated="not deprecated">
   3130       <param name="binder" type="com.google.inject.Binder"/>
   3131       <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
   3132       <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
   3133       <doc>
   3134       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3135  {@link Map} that is itself bound with no binding annotation.]]>
   3136       </doc>
   3137     </method>
   3138     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3139       abstract="false" native="false" synchronized="false"
   3140       static="true" final="false" visibility="public"
   3141       deprecated="not deprecated">
   3142       <param name="binder" type="com.google.inject.Binder"/>
   3143       <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
   3144       <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
   3145       <doc>
   3146       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3147  {@link Map} that is itself bound with no binding annotation.]]>
   3148       </doc>
   3149     </method>
   3150     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3151       abstract="false" native="false" synchronized="false"
   3152       static="true" final="false" visibility="public"
   3153       deprecated="not deprecated">
   3154       <param name="binder" type="com.google.inject.Binder"/>
   3155       <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
   3156       <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
   3157       <param name="annotation" type="java.lang.annotation.Annotation"/>
   3158       <doc>
   3159       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3160  {@link Map} that is itself bound with {@code annotation}.]]>
   3161       </doc>
   3162     </method>
   3163     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3164       abstract="false" native="false" synchronized="false"
   3165       static="true" final="false" visibility="public"
   3166       deprecated="not deprecated">
   3167       <param name="binder" type="com.google.inject.Binder"/>
   3168       <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
   3169       <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
   3170       <param name="annotation" type="java.lang.annotation.Annotation"/>
   3171       <doc>
   3172       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3173  {@link Map} that is itself bound with {@code annotation}.]]>
   3174       </doc>
   3175     </method>
   3176     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3177       abstract="false" native="false" synchronized="false"
   3178       static="true" final="false" visibility="public"
   3179       deprecated="not deprecated">
   3180       <param name="binder" type="com.google.inject.Binder"/>
   3181       <param name="keyType" type="com.google.inject.TypeLiteral&lt;K&gt;"/>
   3182       <param name="valueType" type="com.google.inject.TypeLiteral&lt;V&gt;"/>
   3183       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3184       <doc>
   3185       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3186  {@link Map} that is itself bound with {@code annotationType}.]]>
   3187       </doc>
   3188     </method>
   3189     <method name="newMapBinder" return="com.google.inject.multibindings.MapBinder&lt;K, V&gt;"
   3190       abstract="false" native="false" synchronized="false"
   3191       static="true" final="false" visibility="public"
   3192       deprecated="not deprecated">
   3193       <param name="binder" type="com.google.inject.Binder"/>
   3194       <param name="keyType" type="java.lang.Class&lt;K&gt;"/>
   3195       <param name="valueType" type="java.lang.Class&lt;V&gt;"/>
   3196       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3197       <doc>
   3198       <![CDATA[Returns a new mapbinder that collects entries of {@code keyType}/{@code valueType} in a
   3199  {@link Map} that is itself bound with {@code annotationType}.]]>
   3200       </doc>
   3201     </method>
   3202     <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;V&gt;"
   3203       abstract="true" native="false" synchronized="false"
   3204       static="false" final="false" visibility="public"
   3205       deprecated="not deprecated">
   3206       <param name="key" type="K"/>
   3207       <doc>
   3208       <![CDATA[Returns a binding builder used to add a new entry in the map. Each
   3209  key must be distinct (and non-null). Bound providers will be evaluated each
   3210  time the map is injected.
   3211 
   3212  <p>It is an error to call this method without also calling one of the
   3213  {@code to} methods on the returned binding builder.
   3214 
   3215  <p>Scoping elements independently is supported. Use the {@code in} method
   3216  to specify a binding scope.]]>
   3217       </doc>
   3218     </method>
   3219     <doc>
   3220     <![CDATA[An API to bind multiple map entries separately, only to later inject them as
   3221  a complete map. MapBinder is intended for use in your application's module:
   3222  <pre><code>
   3223  public class SnacksModule extends AbstractModule {
   3224    protected void configure() {
   3225      MapBinder&lt;String, Snack&gt; mapbinder
   3226          = MapBinder.newMapBinder(binder(), String.class, Snack.class);
   3227      mapbinder.addBinding("twix").toInstance(new Twix());
   3228      mapbinder.addBinding("snickers").toProvider(SnickersProvider.class);
   3229      mapbinder.addBinding("skittles").to(Skittles.class);
   3230    }
   3231  }</code></pre>
   3232 
   3233  <p>With this binding, a {@link Map}{@code <String, Snack>} can now be 
   3234  injected:
   3235  <pre><code>
   3236  class SnackMachine {
   3237    {@literal @}Inject
   3238    public SnackMachine(Map&lt;String, Snack&gt; snacks) { ... }
   3239  }</code></pre>
   3240  
   3241  <p>In addition to binding {@code Map<K, V>}, a mapbinder will also bind
   3242  {@code Map<K, Provider<V>>} for lazy value provision:
   3243  <pre><code>
   3244  class SnackMachine {
   3245    {@literal @}Inject
   3246    public SnackMachine(Map&lt;String, Provider&lt;Snack&gt;&gt; snackProviders) { ... }
   3247  }</code></pre>
   3248 
   3249  <p>Creating mapbindings from different modules is supported. For example, it
   3250  is okay to have both {@code CandyModule} and {@code ChipsModule} both
   3251  create their own {@code MapBinder<String, Snack>}, and to each contribute 
   3252  bindings to the snacks map. When that map is injected, it will contain 
   3253  entries from both modules.
   3254 
   3255  <p>Values are resolved at map injection time. If a value is bound to a
   3256  provider, that provider's get method will be called each time the map is
   3257  injected (unless the binding is also scoped, or a map of providers is injected).
   3258 
   3259  <p>Annotations are used to create different maps of the same key/value
   3260  type. Each distinct annotation gets its own independent map.
   3261 
   3262  <p><strong>Keys must be distinct.</strong> If the same key is bound more than
   3263  once, map injection will fail.
   3264 
   3265  <p><strong>Keys must be non-null.</strong> {@code addBinding(null)} will 
   3266  throw an unchecked exception.
   3267 
   3268  <p><strong>Values must be non-null to use map injection.</strong> If any
   3269  value is null, map injection will fail (although injecting a map of providers
   3270  will not).
   3271 
   3272  @author dpb (a] google.com (David P. Baker)]]>
   3273     </doc>
   3274   </class>
   3275   <!-- end class com.google.inject.multibindings.MapBinder -->
   3276   <!-- start class com.google.inject.multibindings.Multibinder -->
   3277   <class name="Multibinder" extends="java.lang.Object"
   3278     abstract="true"
   3279     static="false" final="false" visibility="public"
   3280     deprecated="not deprecated">
   3281     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3282       abstract="false" native="false" synchronized="false"
   3283       static="true" final="false" visibility="public"
   3284       deprecated="not deprecated">
   3285       <param name="binder" type="com.google.inject.Binder"/>
   3286       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   3287       <doc>
   3288       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3289  itself bound with no binding annotation.]]>
   3290       </doc>
   3291     </method>
   3292     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3293       abstract="false" native="false" synchronized="false"
   3294       static="true" final="false" visibility="public"
   3295       deprecated="not deprecated">
   3296       <param name="binder" type="com.google.inject.Binder"/>
   3297       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   3298       <doc>
   3299       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3300  itself bound with no binding annotation.]]>
   3301       </doc>
   3302     </method>
   3303     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3304       abstract="false" native="false" synchronized="false"
   3305       static="true" final="false" visibility="public"
   3306       deprecated="not deprecated">
   3307       <param name="binder" type="com.google.inject.Binder"/>
   3308       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   3309       <param name="annotation" type="java.lang.annotation.Annotation"/>
   3310       <doc>
   3311       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3312  itself bound with {@code annotation}.]]>
   3313       </doc>
   3314     </method>
   3315     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3316       abstract="false" native="false" synchronized="false"
   3317       static="true" final="false" visibility="public"
   3318       deprecated="not deprecated">
   3319       <param name="binder" type="com.google.inject.Binder"/>
   3320       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   3321       <param name="annotation" type="java.lang.annotation.Annotation"/>
   3322       <doc>
   3323       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3324  itself bound with {@code annotation}.]]>
   3325       </doc>
   3326     </method>
   3327     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3328       abstract="false" native="false" synchronized="false"
   3329       static="true" final="false" visibility="public"
   3330       deprecated="not deprecated">
   3331       <param name="binder" type="com.google.inject.Binder"/>
   3332       <param name="type" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   3333       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3334       <doc>
   3335       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3336  itself bound with {@code annotationType}.]]>
   3337       </doc>
   3338     </method>
   3339     <method name="newSetBinder" return="com.google.inject.multibindings.Multibinder&lt;T&gt;"
   3340       abstract="false" native="false" synchronized="false"
   3341       static="true" final="false" visibility="public"
   3342       deprecated="not deprecated">
   3343       <param name="binder" type="com.google.inject.Binder"/>
   3344       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   3345       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3346       <doc>
   3347       <![CDATA[Returns a new multibinder that collects instances of {@code type} in a {@link Set} that is
   3348  itself bound with {@code annotationType}.]]>
   3349       </doc>
   3350     </method>
   3351     <method name="addBinding" return="com.google.inject.binder.LinkedBindingBuilder&lt;T&gt;"
   3352       abstract="true" native="false" synchronized="false"
   3353       static="false" final="false" visibility="public"
   3354       deprecated="not deprecated">
   3355       <doc>
   3356       <![CDATA[Returns a binding builder used to add a new element in the set. Each
   3357  bound element must have a distinct value. Bound providers will be
   3358  evaluated each time the set is injected.
   3359 
   3360  <p>It is an error to call this method without also calling one of the
   3361  {@code to} methods on the returned binding builder.
   3362 
   3363  <p>Scoping elements independently is supported. Use the {@code in} method
   3364  to specify a binding scope.]]>
   3365       </doc>
   3366     </method>
   3367     <doc>
   3368     <![CDATA[An API to bind multiple values separately, only to later inject them as a
   3369  complete collection. Multibinder is intended for use in your application's
   3370  module:
   3371  <pre><code>
   3372  public class SnacksModule extends AbstractModule {
   3373    protected void configure() {
   3374      Multibinder&lt;Snack&gt; multibinder
   3375          = Multibinder.newSetBinder(binder(), Snack.class);
   3376      multibinder.addBinding().toInstance(new Twix());
   3377      multibinder.addBinding().toProvider(SnickersProvider.class);
   3378      multibinder.addBinding().to(Skittles.class);
   3379    }
   3380  }</code></pre>
   3381 
   3382  <p>With this binding, a {@link Set}{@code <Snack>} can now be injected:
   3383  <pre><code>
   3384  class SnackMachine {
   3385    {@literal @}Inject
   3386    public SnackMachine(Set&lt;Snack&gt; snacks) { ... }
   3387  }</code></pre>
   3388 
   3389  <p>Create multibindings from different modules is supported. For example, it
   3390  is okay to have both {@code CandyModule} and {@code ChipsModule} to both
   3391  create their own {@code Multibinder<Snack>}, and to each contribute bindings
   3392  to the set of snacks. When that set is injected, it will contain elements
   3393  from both modules.
   3394 
   3395  <p>Elements are resolved at set injection time. If an element is bound to a
   3396  provider, that provider's get method will be called each time the set is
   3397  injected (unless the binding is also scoped).
   3398 
   3399  <p>Annotations are be used to create different sets of the same element
   3400  type. Each distinct annotation gets its own independent collection of
   3401  elements.
   3402 
   3403  <p><strong>Elements must be distinct.</strong> If multiple bound elements
   3404  have the same value, set injection will fail.
   3405 
   3406  <p><strong>Elements must be non-null.</strong> If any set element is null,
   3407  set injection will fail.
   3408 
   3409  @author jessewilson (a] google.com (Jesse Wilson)]]>
   3410     </doc>
   3411   </class>
   3412   <!-- end class com.google.inject.multibindings.Multibinder -->
   3413 </package>
   3414 <package name="com.google.inject.name">
   3415   <!-- start class com.google.inject.name.Named -->
   3416   <class name="Named"    abstract="true"
   3417     static="false" final="false" visibility="public"
   3418     deprecated="not deprecated">
   3419     <implements name="java.lang.annotation.Annotation"/>
   3420     <doc>
   3421     <![CDATA[Annotates named things.
   3422 
   3423  @author crazybob (a] google.com (Bob Lee)]]>
   3424     </doc>
   3425   </class>
   3426   <!-- end class com.google.inject.name.Named -->
   3427   <!-- start class com.google.inject.name.Names -->
   3428   <class name="Names" extends="java.lang.Object"
   3429     abstract="false"
   3430     static="false" final="false" visibility="public"
   3431     deprecated="not deprecated">
   3432     <method name="named" return="com.google.inject.name.Named"
   3433       abstract="false" native="false" synchronized="false"
   3434       static="true" final="false" visibility="public"
   3435       deprecated="not deprecated">
   3436       <param name="name" type="java.lang.String"/>
   3437       <doc>
   3438       <![CDATA[Creates a {@link Named} annotation with {@code name} as the value.]]>
   3439       </doc>
   3440     </method>
   3441     <method name="bindProperties"
   3442       abstract="false" native="false" synchronized="false"
   3443       static="true" final="false" visibility="public"
   3444       deprecated="not deprecated">
   3445       <param name="binder" type="com.google.inject.Binder"/>
   3446       <param name="properties" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
   3447       <doc>
   3448       <![CDATA[Creates a constant binding to {@code @Named(key)} for each entry in
   3449  {@code properties}.]]>
   3450       </doc>
   3451     </method>
   3452     <method name="bindProperties"
   3453       abstract="false" native="false" synchronized="false"
   3454       static="true" final="false" visibility="public"
   3455       deprecated="not deprecated">
   3456       <param name="binder" type="com.google.inject.Binder"/>
   3457       <param name="properties" type="java.util.Properties"/>
   3458       <doc>
   3459       <![CDATA[Creates a constant binding to {@code @Named(key)} for each property. This
   3460  method binds all properties including those inherited from 
   3461  {@link Properties#defaults defaults}.]]>
   3462       </doc>
   3463     </method>
   3464     <doc>
   3465     <![CDATA[Utility methods for use with {@code @}{@link Named}.
   3466 
   3467  @author crazybob (a] google.com (Bob Lee)]]>
   3468     </doc>
   3469   </class>
   3470   <!-- end class com.google.inject.name.Names -->
   3471 </package>
   3472 <package name="com.google.inject.servlet">
   3473   <!-- start class com.google.inject.servlet.GuiceFilter -->
   3474   <class name="GuiceFilter" extends="java.lang.Object"
   3475     abstract="false"
   3476     static="false" final="false" visibility="public"
   3477     deprecated="not deprecated">
   3478     <constructor name="GuiceFilter"
   3479       static="false" final="false" visibility="public"
   3480       deprecated="not deprecated">
   3481     </constructor>
   3482     <method name="doFilter"
   3483       abstract="false" native="false" synchronized="false"
   3484       static="false" final="false" visibility="public"
   3485       deprecated="not deprecated">
   3486       <param name="servletRequest" type="ServletRequest"/>
   3487       <param name="servletResponse" type="ServletResponse"/>
   3488       <param name="filterChain" type="FilterChain"/>
   3489       <exception name="IOException" type="java.io.IOException"/>
   3490       <exception name="ServletException" type="ServletException"/>
   3491     </method>
   3492     <method name="init"
   3493       abstract="false" native="false" synchronized="false"
   3494       static="false" final="false" visibility="public"
   3495       deprecated="not deprecated">
   3496       <param name="filterConfig" type="FilterConfig"/>
   3497       <exception name="ServletException" type="ServletException"/>
   3498     </method>
   3499     <method name="destroy"
   3500       abstract="false" native="false" synchronized="false"
   3501       static="false" final="false" visibility="public"
   3502       deprecated="not deprecated">
   3503     </method>
   3504     <doc>
   3505     <![CDATA[<p>
   3506  Apply this filter in web.xml above all other filters (typically), to all requests where you plan
   3507   to use servlet scopes. This is also needed in order to dispatch requests to injectable filters
   3508   and servlets:
   3509   <pre>
   3510   &lt;filter&gt;
   3511     &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
   3512     &lt;filter-class&gt;<b>com.google.inject.servlet.GuiceFilter</b>&lt;/filter-class&gt;
   3513   &lt;/filter&gt;
   3514 
   3515   &lt;filter-mapping&gt;
   3516     &lt;filter-name&gt;guiceFilter&lt;/filter-name&gt;
   3517     &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
   3518   &lt;/filter-mapping&gt;
   3519   </pre>
   3520 
   3521  This filter must appear before every filter that makes use of Guice injection or servlet
   3522  scopes functionality. Typically, you will only register this filter in web.xml and register
   3523  any other filters (and servlets) using a {@link ServletModule}.
   3524 
   3525  @author crazybob (a] google.com (Bob Lee)
   3526  @author dhanji (a] gmail.com (Dhanji R. Prasanna)]]>
   3527     </doc>
   3528   </class>
   3529   <!-- end class com.google.inject.servlet.GuiceFilter -->
   3530   <!-- start class com.google.inject.servlet.GuiceServletContextListener -->
   3531   <class name="GuiceServletContextListener" extends="java.lang.Object"
   3532     abstract="true"
   3533     static="false" final="false" visibility="public"
   3534     deprecated="not deprecated">
   3535     <constructor name="GuiceServletContextListener"
   3536       static="false" final="false" visibility="public"
   3537       deprecated="not deprecated">
   3538     </constructor>
   3539     <method name="contextInitialized"
   3540       abstract="false" native="false" synchronized="false"
   3541       static="false" final="false" visibility="public"
   3542       deprecated="not deprecated">
   3543       <param name="servletContextEvent" type="ServletContextEvent"/>
   3544     </method>
   3545     <method name="contextDestroyed"
   3546       abstract="false" native="false" synchronized="false"
   3547       static="false" final="false" visibility="public"
   3548       deprecated="not deprecated">
   3549       <param name="servletContextEvent" type="ServletContextEvent"/>
   3550     </method>
   3551     <method name="getInjector" return="com.google.inject.Injector"
   3552       abstract="true" native="false" synchronized="false"
   3553       static="false" final="false" visibility="protected"
   3554       deprecated="not deprecated">
   3555       <doc>
   3556       <![CDATA[Override this method to create (or otherwise obtain a reference to) your
   3557  injector.]]>
   3558       </doc>
   3559     </method>
   3560     <doc>
   3561     <![CDATA[As of Guice 2.0 you can still use (your subclasses of) {@code GuiceServletContextListener}
   3562  class as a logical place to create and configure your injector. This will ensure the injector
   3563  is created when the web application is deployed.
   3564  
   3565  @author Kevin Bourrillion (kevinb (a] google.com)
   3566  @since 2.0]]>
   3567     </doc>
   3568   </class>
   3569   <!-- end class com.google.inject.servlet.GuiceServletContextListener -->
   3570   <!-- start class com.google.inject.servlet.RequestParameters -->
   3571   <class name="RequestParameters"    abstract="true"
   3572     static="false" final="false" visibility="public"
   3573     deprecated="not deprecated">
   3574     <implements name="java.lang.annotation.Annotation"/>
   3575     <doc>
   3576     <![CDATA[Apply this to field or parameters of type {@code Map<String, String[]>}
   3577  when you want the HTTP request parameter map to be injected.
   3578 
   3579  @author crazybob (a] google.com (Bob Lee)]]>
   3580     </doc>
   3581   </class>
   3582   <!-- end class com.google.inject.servlet.RequestParameters -->
   3583   <!-- start class com.google.inject.servlet.RequestScoped -->
   3584   <class name="RequestScoped"    abstract="true"
   3585     static="false" final="false" visibility="public"
   3586     deprecated="not deprecated">
   3587     <implements name="java.lang.annotation.Annotation"/>
   3588     <doc>
   3589     <![CDATA[Apply this to implementation classes when you want one instance per request.
   3590 
   3591  @author crazybob (a] google.com (Bob Lee)]]>
   3592     </doc>
   3593   </class>
   3594   <!-- end class com.google.inject.servlet.RequestScoped -->
   3595   <!-- start class com.google.inject.servlet.ServletModule -->
   3596   <class name="ServletModule" extends="com.google.inject.AbstractModule"
   3597     abstract="false"
   3598     static="false" final="false" visibility="public"
   3599     deprecated="not deprecated">
   3600     <constructor name="ServletModule"
   3601       static="false" final="false" visibility="public"
   3602       deprecated="not deprecated">
   3603     </constructor>
   3604     <method name="configure"
   3605       abstract="false" native="false" synchronized="false"
   3606       static="false" final="true" visibility="protected"
   3607       deprecated="not deprecated">
   3608     </method>
   3609     <method name="configureServlets"
   3610       abstract="false" native="false" synchronized="false"
   3611       static="false" final="false" visibility="protected"
   3612       deprecated="not deprecated">
   3613       <doc>
   3614       <![CDATA[<h3>Servlet Mapping EDSL</h3>
   3615 
   3616  <p> Part of the EDSL builder language for configuring servlets
   3617  and filters with guice-servlet. Think of this as an in-code replacement for web.xml.
   3618  Filters and servlets are configured here using simple java method calls. Here is a typical
   3619  example of registering a filter when creating your Guice injector:
   3620 
   3621  <pre>
   3622    Guice.createInjector(..., new ServletModule() {
   3623 
   3624      {@literal @}Override
   3625      protected void configureServlets() {
   3626        <b>serve("*.html").with(MyServlet.class)</b>
   3627      }
   3628    }
   3629  </pre>
   3630 
   3631  This registers a servlet (subclass of {@code HttpServlet}) called {@code MyServlet} to service
   3632  any web pages ending in {@code .html}. You can also use a path-style syntax to register
   3633  servlets:
   3634 
   3635  <pre>
   3636        <b>serve("/my/*").with(MyServlet.class)</b>
   3637  </pre>
   3638 
   3639  Every servlet (or filter) is required to be a singleton. If you cannot annotate the class
   3640  directly, you should add a separate {@code bind(..).in(Singleton.class)} rule elsewhere in
   3641  your module. Mapping a servlet that is bound under any other scope is an error.
   3642 
   3643  <p>
   3644  <h4>Dispatch Order</h4>
   3645  You are free to register as many servlets and filters as you like this way. They will
   3646  be compared and dispatched in the order in which the filter methods are called:
   3647 
   3648  <pre>
   3649 
   3650    Guice.createInjector(..., new ServletModule() {
   3651 
   3652      {@literal @}Override
   3653      protected void configureServlets() {
   3654        filter("/*").through(MyFilter.class);
   3655        filter("*.css").through(MyCssFilter.class);
   3656        // etc..
   3657 
   3658        serve("*.html").with(MyServlet.class);
   3659        serve("/my/*").with(MyServlet.class);
   3660        // etc..
   3661       }
   3662     }
   3663  </pre>
   3664  This will traverse down the list of rules in lexical order. For example, a url
   3665   "{@code /my/file.js}" (after it runs through the matching filters) will first
   3666   be compared against the servlet mapping:
   3667  
   3668  <pre>
   3669        serve("*.html").with(MyServlet.class);
   3670  </pre>
   3671  And failing that, it will descend to the next servlet mapping:
   3672 
   3673  <pre>
   3674        serve("/my/*").with(MyServlet.class);
   3675  </pre>
   3676 
   3677  Since this rule matches, Guice Servlet will dispatch to {@code MyServlet}. These
   3678  two mapping rules can also be written in more compact form using varargs syntax:
   3679 
   3680  <pre>
   3681        serve(<b>"*.html", "/my/*"</b>).with(MyServlet.class);
   3682  </pre>
   3683  
   3684  This way you can map several URI patterns to the same servlet. A similar syntax is
   3685  also available for filter mappings.
   3686 
   3687  <p>
   3688  <h4>Regular Expressions</h4>
   3689  You can also map servlets (or filters) to URIs using regular expressions:
   3690  <pre>
   3691     <b>serveRegex("(.)*ajax(.)*").with(MyAjaxServlet.class)</b>
   3692  </pre>
   3693 
   3694  This will map any URI containing the text "ajax" in it to {@code MyAjaxServlet}. Such as:
   3695  <ul>
   3696  <li>http://www.google.com/ajax.html</li>
   3697  <li>http://www.google.com/content/ajax/index</li>
   3698  <li>http://www.google.com/it/is_totally_ajaxian</li>
   3699  </ul>
   3700 
   3701 
   3702  <h3>Initialization Parameters</h3>
   3703 
   3704  Servlets (and filters) allow you to pass in init params
   3705  using the {@code <init-param>} tag in web.xml. You can similarly pass in parameters to
   3706  Servlets and filters registered in Guice-servlet using a {@link java.util.Map} of parameter
   3707  name/value pairs. For example, to initialize {@code MyServlet} with two parameters
   3708  ({@code name="Dhanji", site="google.com"}) you could write:
   3709 
   3710  <pre>
   3711   Map&lt;String, String&gt; params = new HashMap&lt;String, String&gt;();
   3712   params.put("name", "Dhanji");
   3713   params.put("site", "google.com");
   3714 
   3715   ...
   3716       serve("/*").with(MyServlet.class, <b>params</b>)
   3717  </pre>
   3718 
   3719  <p>
   3720  <h3>Binding Keys</h3>
   3721 
   3722  You can also bind keys rather than classes. This lets you hide
   3723  implementations with package-local visbility and expose them using
   3724  only a Guice module and an annotation:
   3725 
   3726  <pre>
   3727   ...
   3728       filter("/*").through(<b>Key.get(Filter.class, Fave.class)</b>);
   3729  </pre>
   3730 
   3731  Where {@code Filter.class} refers to the Servlet API interface and {@code Fave.class} is a
   3732  custom binding annotation. Elsewhere (in one of your own modules) you can bind this
   3733  filter's implementation:
   3734 
   3735  <pre>
   3736    bind(Filter.class)<b>.annotatedWith(Fave.class)</b>.to(MyFilterImpl.class);
   3737  </pre>
   3738 
   3739  See {@link com.google.inject.Binder} for more information on binding syntax.
   3740 
   3741  <p>
   3742  <h3>Multiple Modules</h3>
   3743 
   3744  It is sometimes useful to capture servlet and filter mappings from multiple different
   3745  modules. This is essential if you want to package and offer drop-in Guice plugins that
   3746  provide servlet functionality.
   3747 
   3748  <p>
   3749  Guice Servlet allows you to register several instances of {@code ServletModule} to your
   3750  injector. The order in which these modules are installed determines the dispatch order
   3751  of filters and the precedence order of servlets. For example, if you had two servlet modules,
   3752  {@code RpcModule} and {@code WebServiceModule} and they each contained a filter that mapped
   3753  to the same URI pattern, {@code "/*"}:
   3754 
   3755  <p>
   3756  In {@code RpcModule}:
   3757  <pre>
   3758      filter("/*").through(RpcFilter.class);
   3759  </pre>
   3760 
   3761  In {@code WebServiceModule}:
   3762  <pre>
   3763      filter("/*").through(WebServiceFilter.class);
   3764  </pre>
   3765 
   3766  Then the order in which these filters are dispatched is determined by the order in which
   3767  the modules are installed:
   3768 
   3769  <pre>
   3770    <b>install(new WebServiceModule());</b>
   3771    install(new RpcModule());
   3772  </pre>
   3773 
   3774  In the case shown above {@code WebServiceFilter} will run first.
   3775  
   3776  @since 2.0]]>
   3777       </doc>
   3778     </method>
   3779     <method name="filter" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
   3780       abstract="false" native="false" synchronized="false"
   3781       static="false" final="true" visibility="protected"
   3782       deprecated="not deprecated">
   3783       <param name="urlPattern" type="java.lang.String"/>
   3784       <param name="morePatterns" type="java.lang.String[]"/>
   3785       <doc>
   3786       <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
   3787  @since 2.0]]>
   3788       </doc>
   3789     </method>
   3790     <method name="filterRegex" return="com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder"
   3791       abstract="false" native="false" synchronized="false"
   3792       static="false" final="true" visibility="protected"
   3793       deprecated="not deprecated">
   3794       <param name="regex" type="java.lang.String"/>
   3795       <param name="regexes" type="java.lang.String[]"/>
   3796       <doc>
   3797       <![CDATA[@param regex Any Java-style regular expression.
   3798  @since 2.0]]>
   3799       </doc>
   3800     </method>
   3801     <method name="serve" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
   3802       abstract="false" native="false" synchronized="false"
   3803       static="false" final="true" visibility="protected"
   3804       deprecated="not deprecated">
   3805       <param name="urlPattern" type="java.lang.String"/>
   3806       <param name="morePatterns" type="java.lang.String[]"/>
   3807       <doc>
   3808       <![CDATA[@param urlPattern Any Servlet-style pattern. examples: /*, /html/*, *.html, etc.
   3809  @since 2.0]]>
   3810       </doc>
   3811     </method>
   3812     <method name="serveRegex" return="com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder"
   3813       abstract="false" native="false" synchronized="false"
   3814       static="false" final="true" visibility="protected"
   3815       deprecated="not deprecated">
   3816       <param name="regex" type="java.lang.String"/>
   3817       <param name="regexes" type="java.lang.String[]"/>
   3818       <doc>
   3819       <![CDATA[@param regex Any Java-style regular expression.
   3820  @since 2.0]]>
   3821       </doc>
   3822     </method>
   3823     <doc>
   3824     <![CDATA[Configures the servlet scopes and creates bindings for the servlet API
   3825  objects so you can inject the request, response, session, etc.
   3826 
   3827  <p>
   3828  You should subclass this module to register servlets and
   3829  filters in the {@link #configureServlets()} method.
   3830 
   3831  @author crazybob (a] google.com (Bob Lee)
   3832  @author dhanji (a] gmail.com (Dhanji R. Prasanna)]]>
   3833     </doc>
   3834   </class>
   3835   <!-- end class com.google.inject.servlet.ServletModule -->
   3836   <!-- start interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
   3837   <interface name="ServletModule.FilterKeyBindingBuilder"    abstract="true"
   3838     static="true" final="false" visibility="public"
   3839     deprecated="not deprecated">
   3840     <method name="through"
   3841       abstract="false" native="false" synchronized="false"
   3842       static="false" final="false" visibility="public"
   3843       deprecated="not deprecated">
   3844       <param name="filterKey" type="java.lang.Class&lt;? extends Filter&gt;"/>
   3845     </method>
   3846     <method name="through"
   3847       abstract="false" native="false" synchronized="false"
   3848       static="false" final="false" visibility="public"
   3849       deprecated="not deprecated">
   3850       <param name="filterKey" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
   3851     </method>
   3852     <method name="through"
   3853       abstract="false" native="false" synchronized="false"
   3854       static="false" final="false" visibility="public"
   3855       deprecated="not deprecated">
   3856       <param name="dummyFilterClass" type="java.lang.Class&lt;? extends Filter&gt;"/>
   3857       <param name="contextParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
   3858     </method>
   3859     <method name="through"
   3860       abstract="false" native="false" synchronized="false"
   3861       static="false" final="false" visibility="public"
   3862       deprecated="not deprecated">
   3863       <param name="dummyFilterClass" type="com.google.inject.Key&lt;? extends Filter&gt;"/>
   3864       <param name="contextParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
   3865     </method>
   3866     <doc>
   3867     <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
   3868 
   3869  @since 2.0]]>
   3870     </doc>
   3871   </interface>
   3872   <!-- end interface com.google.inject.servlet.ServletModule.FilterKeyBindingBuilder -->
   3873   <!-- start interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
   3874   <interface name="ServletModule.ServletKeyBindingBuilder"    abstract="true"
   3875     static="true" final="false" visibility="public"
   3876     deprecated="not deprecated">
   3877     <method name="with"
   3878       abstract="false" native="false" synchronized="false"
   3879       static="false" final="false" visibility="public"
   3880       deprecated="not deprecated">
   3881       <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
   3882     </method>
   3883     <method name="with"
   3884       abstract="false" native="false" synchronized="false"
   3885       static="false" final="false" visibility="public"
   3886       deprecated="not deprecated">
   3887       <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
   3888     </method>
   3889     <method name="with"
   3890       abstract="false" native="false" synchronized="false"
   3891       static="false" final="false" visibility="public"
   3892       deprecated="not deprecated">
   3893       <param name="servletKey" type="java.lang.Class&lt;? extends HttpServlet&gt;"/>
   3894       <param name="contextParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
   3895     </method>
   3896     <method name="with"
   3897       abstract="false" native="false" synchronized="false"
   3898       static="false" final="false" visibility="public"
   3899       deprecated="not deprecated">
   3900       <param name="servletKey" type="com.google.inject.Key&lt;? extends HttpServlet&gt;"/>
   3901       <param name="contextParams" type="java.util.Map&lt;java.lang.String, java.lang.String&gt;"/>
   3902     </method>
   3903     <doc>
   3904     <![CDATA[See the EDSL examples at {@link ServletModule#configureServlets()}
   3905 
   3906  @since 2.0]]>
   3907     </doc>
   3908   </interface>
   3909   <!-- end interface com.google.inject.servlet.ServletModule.ServletKeyBindingBuilder -->
   3910   <!-- start class com.google.inject.servlet.ServletScopes -->
   3911   <class name="ServletScopes" extends="java.lang.Object"
   3912     abstract="false"
   3913     static="false" final="false" visibility="public"
   3914     deprecated="not deprecated">
   3915     <field name="REQUEST" type="com.google.inject.Scope"
   3916       transient="false" volatile="false"
   3917       static="true" final="true" visibility="public"
   3918       deprecated="not deprecated">
   3919       <doc>
   3920       <![CDATA[HTTP servlet request scope.]]>
   3921       </doc>
   3922     </field>
   3923     <field name="SESSION" type="com.google.inject.Scope"
   3924       transient="false" volatile="false"
   3925       static="true" final="true" visibility="public"
   3926       deprecated="not deprecated">
   3927       <doc>
   3928       <![CDATA[HTTP session scope.]]>
   3929       </doc>
   3930     </field>
   3931     <doc>
   3932     <![CDATA[Servlet scopes.
   3933 
   3934  @author crazybob (a] google.com (Bob Lee)]]>
   3935     </doc>
   3936   </class>
   3937   <!-- end class com.google.inject.servlet.ServletScopes -->
   3938   <!-- start class com.google.inject.servlet.SessionScoped -->
   3939   <class name="SessionScoped"    abstract="true"
   3940     static="false" final="false" visibility="public"
   3941     deprecated="not deprecated">
   3942     <implements name="java.lang.annotation.Annotation"/>
   3943     <doc>
   3944     <![CDATA[Apply this to implementation classes when you want one instance per session.
   3945 
   3946  @see com.google.inject.Scopes#SINGLETON
   3947  @author crazybob (a] google.com (Bob Lee)]]>
   3948     </doc>
   3949   </class>
   3950   <!-- end class com.google.inject.servlet.SessionScoped -->
   3951 </package>
   3952 <package name="com.google.inject.spi">
   3953   <!-- start interface com.google.inject.spi.BindingScopingVisitor -->
   3954   <interface name="BindingScopingVisitor"    abstract="true"
   3955     static="false" final="false" visibility="public"
   3956     deprecated="not deprecated">
   3957     <method name="visitEagerSingleton" return="V"
   3958       abstract="false" native="false" synchronized="false"
   3959       static="false" final="false" visibility="public"
   3960       deprecated="not deprecated">
   3961       <doc>
   3962       <![CDATA[Visit an eager singleton or single instance. This scope strategy is found on both module and
   3963  injector bindings.]]>
   3964       </doc>
   3965     </method>
   3966     <method name="visitScope" return="V"
   3967       abstract="false" native="false" synchronized="false"
   3968       static="false" final="false" visibility="public"
   3969       deprecated="not deprecated">
   3970       <param name="scope" type="com.google.inject.Scope"/>
   3971       <doc>
   3972       <![CDATA[Visit a scope instance. This scope strategy is found on both module and injector bindings.]]>
   3973       </doc>
   3974     </method>
   3975     <method name="visitScopeAnnotation" return="V"
   3976       abstract="false" native="false" synchronized="false"
   3977       static="false" final="false" visibility="public"
   3978       deprecated="not deprecated">
   3979       <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   3980       <doc>
   3981       <![CDATA[Visit a scope annotation. This scope strategy is found only on module bindings. The instance
   3982  that implements this scope is registered by {@link com.google.inject.Binder#bindScope(Class,
   3983  Scope) Binder.bindScope()}.]]>
   3984       </doc>
   3985     </method>
   3986     <method name="visitNoScoping" return="V"
   3987       abstract="false" native="false" synchronized="false"
   3988       static="false" final="false" visibility="public"
   3989       deprecated="not deprecated">
   3990       <doc>
   3991       <![CDATA[Visit an unspecified or unscoped strategy. On a module, this strategy indicates that the
   3992  injector should use scoping annotations to find a scope. On an injector, it indicates that
   3993  no scope is applied to the binding. An unscoped binding will behave like a scoped one when it
   3994  is linked to a scoped binding.]]>
   3995       </doc>
   3996     </method>
   3997     <doc>
   3998     <![CDATA[Visits each of the strategies used to scope an injection.
   3999 
   4000  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4001      {@code return null} if no return type is needed.
   4002  @since 2.0]]>
   4003     </doc>
   4004   </interface>
   4005   <!-- end interface com.google.inject.spi.BindingScopingVisitor -->
   4006   <!-- start interface com.google.inject.spi.BindingTargetVisitor -->
   4007   <interface name="BindingTargetVisitor"    abstract="true"
   4008     static="false" final="false" visibility="public"
   4009     deprecated="not deprecated">
   4010     <method name="visit" return="V"
   4011       abstract="false" native="false" synchronized="false"
   4012       static="false" final="false" visibility="public"
   4013       deprecated="not deprecated">
   4014       <param name="binding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
   4015       <doc>
   4016       <![CDATA[Visit a instance binding. The same instance is returned for every injection. This target is
   4017  found in both module and injector bindings.]]>
   4018       </doc>
   4019     </method>
   4020     <method name="visit" return="V"
   4021       abstract="false" native="false" synchronized="false"
   4022       static="false" final="false" visibility="public"
   4023       deprecated="not deprecated">
   4024       <param name="binding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
   4025       <doc>
   4026       <![CDATA[Visit a provider instance binding. The provider's {@code get} method is invoked to resolve
   4027  injections. This target is found in both module and injector bindings.]]>
   4028       </doc>
   4029     </method>
   4030     <method name="visit" return="V"
   4031       abstract="false" native="false" synchronized="false"
   4032       static="false" final="false" visibility="public"
   4033       deprecated="not deprecated">
   4034       <param name="binding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
   4035       <doc>
   4036       <![CDATA[Visit a provider key binding. To resolve injections, the provider key is first resolved, then
   4037  that provider's {@code get} method is invoked. This target is found in both module and injector
   4038  bindings.]]>
   4039       </doc>
   4040     </method>
   4041     <method name="visit" return="V"
   4042       abstract="false" native="false" synchronized="false"
   4043       static="false" final="false" visibility="public"
   4044       deprecated="not deprecated">
   4045       <param name="binding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
   4046       <doc>
   4047       <![CDATA[Visit a linked key binding. The other key's binding is used to resolve injections. This
   4048  target is found in both module and injector bindings.]]>
   4049       </doc>
   4050     </method>
   4051     <method name="visit" return="V"
   4052       abstract="false" native="false" synchronized="false"
   4053       static="false" final="false" visibility="public"
   4054       deprecated="not deprecated">
   4055       <param name="binding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
   4056       <doc>
   4057       <![CDATA[Visit a binding to a key exposed from an enclosed private environment. This target is only
   4058  found in injector bindings.]]>
   4059       </doc>
   4060     </method>
   4061     <method name="visit" return="V"
   4062       abstract="false" native="false" synchronized="false"
   4063       static="false" final="false" visibility="public"
   4064       deprecated="not deprecated">
   4065       <param name="binding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
   4066       <doc>
   4067       <![CDATA[Visit an untargetted binding. This target is found only on module bindings. It indicates
   4068  that the injector should use its implicit binding strategies to resolve injections.]]>
   4069       </doc>
   4070     </method>
   4071     <method name="visit" return="V"
   4072       abstract="false" native="false" synchronized="false"
   4073       static="false" final="false" visibility="public"
   4074       deprecated="not deprecated">
   4075       <param name="binding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
   4076       <doc>
   4077       <![CDATA[Visit a constructor binding. To resolve injections, an instance is instantiated by invoking
   4078  {@code constructor}. This target is found only on injector bindings.]]>
   4079       </doc>
   4080     </method>
   4081     <method name="visit" return="V"
   4082       abstract="false" native="false" synchronized="false"
   4083       static="false" final="false" visibility="public"
   4084       deprecated="not deprecated">
   4085       <param name="binding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
   4086       <doc>
   4087       <![CDATA[Visit a binding created from converting a bound instance to a new type. The source binding
   4088  has the same binding annotation but a different type. This target is found only on injector
   4089  bindings.]]>
   4090       </doc>
   4091     </method>
   4092     <method name="visit" return="V"
   4093       abstract="false" native="false" synchronized="false"
   4094       static="false" final="false" visibility="public"
   4095       deprecated="not deprecated">
   4096       <param name="binding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
   4097       <doc>
   4098       <![CDATA[Visit a binding to a {@link com.google.inject.Provider} that delegates to the binding for the
   4099  provided type. This target is found only on injector bindings.]]>
   4100       </doc>
   4101     </method>
   4102     <doc>
   4103     <![CDATA[Visits each of the strategies used to find an instance to satisfy an injection.
   4104 
   4105  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4106      {@code return null} if no return type is needed.
   4107  @since 2.0]]>
   4108     </doc>
   4109   </interface>
   4110   <!-- end interface com.google.inject.spi.BindingTargetVisitor -->
   4111   <!-- start interface com.google.inject.spi.ConstructorBinding -->
   4112   <interface name="ConstructorBinding"    abstract="true"
   4113     static="false" final="false" visibility="public"
   4114     deprecated="not deprecated">
   4115     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   4116     <implements name="com.google.inject.spi.HasDependencies"/>
   4117     <method name="getConstructor" return="com.google.inject.spi.InjectionPoint"
   4118       abstract="false" native="false" synchronized="false"
   4119       static="false" final="false" visibility="public"
   4120       deprecated="not deprecated">
   4121       <doc>
   4122       <![CDATA[Gets the constructor this binding injects.]]>
   4123       </doc>
   4124     </method>
   4125     <method name="getInjectableMembers" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   4126       abstract="false" native="false" synchronized="false"
   4127       static="false" final="false" visibility="public"
   4128       deprecated="not deprecated">
   4129       <doc>
   4130       <![CDATA[Returns all instance method and field injection points on {@code type}.
   4131 
   4132  @return a possibly empty set of injection points. The set has a specified iteration order. All
   4133       fields are returned and then all methods. Within the fields, supertype fields are returned
   4134       before subtype fields. Similarly, supertype methods are returned before subtype methods.]]>
   4135       </doc>
   4136     </method>
   4137     <method name="getMethodInterceptors" return="java.util.Map&lt;java.lang.reflect.Method, java.util.List&lt;org.aopalliance.intercept.MethodInterceptor&gt;&gt;"
   4138       abstract="false" native="false" synchronized="false"
   4139       static="false" final="false" visibility="public"
   4140       deprecated="not deprecated">
   4141       <doc>
   4142       <![CDATA[Returns the interceptors applied to each method, in the order that they will be applied.
   4143 
   4144  @return a possibly empty map]]>
   4145       </doc>
   4146     </method>
   4147     <doc>
   4148     <![CDATA[A binding to the constructor of a concrete clss. To resolve injections, an instance is
   4149  instantiated by invoking the constructor.
   4150 
   4151  @author jessewilson (a] google.com (Jesse Wilson)
   4152  @since 2.0]]>
   4153     </doc>
   4154   </interface>
   4155   <!-- end interface com.google.inject.spi.ConstructorBinding -->
   4156   <!-- start interface com.google.inject.spi.ConvertedConstantBinding -->
   4157   <interface name="ConvertedConstantBinding"    abstract="true"
   4158     static="false" final="false" visibility="public"
   4159     deprecated="not deprecated">
   4160     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   4161     <implements name="com.google.inject.spi.HasDependencies"/>
   4162     <method name="getValue" return="T"
   4163       abstract="false" native="false" synchronized="false"
   4164       static="false" final="false" visibility="public"
   4165       deprecated="not deprecated">
   4166       <doc>
   4167       <![CDATA[Returns the converted value.]]>
   4168       </doc>
   4169     </method>
   4170     <method name="getSourceKey" return="com.google.inject.Key&lt;java.lang.String&gt;"
   4171       abstract="false" native="false" synchronized="false"
   4172       static="false" final="false" visibility="public"
   4173       deprecated="not deprecated">
   4174       <doc>
   4175       <![CDATA[Returns the key for the source binding. That binding can e retrieved from an injector using
   4176  {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
   4177       </doc>
   4178     </method>
   4179     <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
   4180       abstract="false" native="false" synchronized="false"
   4181       static="false" final="false" visibility="public"
   4182       deprecated="not deprecated">
   4183       <doc>
   4184       <![CDATA[Returns a singleton set containing only the converted key.]]>
   4185       </doc>
   4186     </method>
   4187     <doc>
   4188     <![CDATA[A binding created from converting a bound instance to a new type. The source binding has the same
   4189  binding annotation but a different type.
   4190 
   4191  @author jessewilson (a] google.com (Jesse Wilson)
   4192  @since 2.0]]>
   4193     </doc>
   4194   </interface>
   4195   <!-- end interface com.google.inject.spi.ConvertedConstantBinding -->
   4196   <!-- start class com.google.inject.spi.DefaultBindingScopingVisitor -->
   4197   <class name="DefaultBindingScopingVisitor" extends="java.lang.Object"
   4198     abstract="false"
   4199     static="false" final="false" visibility="public"
   4200     deprecated="not deprecated">
   4201     <implements name="com.google.inject.spi.BindingScopingVisitor&lt;V&gt;"/>
   4202     <constructor name="DefaultBindingScopingVisitor"
   4203       static="false" final="false" visibility="public"
   4204       deprecated="not deprecated">
   4205     </constructor>
   4206     <method name="visitOther" return="V"
   4207       abstract="false" native="false" synchronized="false"
   4208       static="false" final="false" visibility="protected"
   4209       deprecated="not deprecated">
   4210       <doc>
   4211       <![CDATA[Default visit implementation. Returns {@code null}.]]>
   4212       </doc>
   4213     </method>
   4214     <method name="visitEagerSingleton" return="V"
   4215       abstract="false" native="false" synchronized="false"
   4216       static="false" final="false" visibility="public"
   4217       deprecated="not deprecated">
   4218     </method>
   4219     <method name="visitScope" return="V"
   4220       abstract="false" native="false" synchronized="false"
   4221       static="false" final="false" visibility="public"
   4222       deprecated="not deprecated">
   4223       <param name="scope" type="com.google.inject.Scope"/>
   4224     </method>
   4225     <method name="visitScopeAnnotation" return="V"
   4226       abstract="false" native="false" synchronized="false"
   4227       static="false" final="false" visibility="public"
   4228       deprecated="not deprecated">
   4229       <param name="scopeAnnotation" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   4230     </method>
   4231     <method name="visitNoScoping" return="V"
   4232       abstract="false" native="false" synchronized="false"
   4233       static="false" final="false" visibility="public"
   4234       deprecated="not deprecated">
   4235     </method>
   4236     <doc>
   4237     <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
   4238  {@link #visitOther()}, returning its result.
   4239 
   4240  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4241      {@code return null} if no return type is needed.
   4242  
   4243  @author jessewilson (a] google.com (Jesse Wilson)
   4244  @since 2.0]]>
   4245     </doc>
   4246   </class>
   4247   <!-- end class com.google.inject.spi.DefaultBindingScopingVisitor -->
   4248   <!-- start class com.google.inject.spi.DefaultBindingTargetVisitor -->
   4249   <class name="DefaultBindingTargetVisitor" extends="java.lang.Object"
   4250     abstract="true"
   4251     static="false" final="false" visibility="public"
   4252     deprecated="not deprecated">
   4253     <implements name="com.google.inject.spi.BindingTargetVisitor&lt;T, V&gt;"/>
   4254     <constructor name="DefaultBindingTargetVisitor"
   4255       static="false" final="false" visibility="public"
   4256       deprecated="not deprecated">
   4257     </constructor>
   4258     <method name="visitOther" return="V"
   4259       abstract="false" native="false" synchronized="false"
   4260       static="false" final="false" visibility="protected"
   4261       deprecated="not deprecated">
   4262       <param name="binding" type="com.google.inject.Binding&lt;? extends T&gt;"/>
   4263       <doc>
   4264       <![CDATA[Default visit implementation. Returns {@code null}.]]>
   4265       </doc>
   4266     </method>
   4267     <method name="visit" return="V"
   4268       abstract="false" native="false" synchronized="false"
   4269       static="false" final="false" visibility="public"
   4270       deprecated="not deprecated">
   4271       <param name="instanceBinding" type="com.google.inject.spi.InstanceBinding&lt;? extends T&gt;"/>
   4272     </method>
   4273     <method name="visit" return="V"
   4274       abstract="false" native="false" synchronized="false"
   4275       static="false" final="false" visibility="public"
   4276       deprecated="not deprecated">
   4277       <param name="providerInstanceBinding" type="com.google.inject.spi.ProviderInstanceBinding&lt;? extends T&gt;"/>
   4278     </method>
   4279     <method name="visit" return="V"
   4280       abstract="false" native="false" synchronized="false"
   4281       static="false" final="false" visibility="public"
   4282       deprecated="not deprecated">
   4283       <param name="providerKeyBinding" type="com.google.inject.spi.ProviderKeyBinding&lt;? extends T&gt;"/>
   4284     </method>
   4285     <method name="visit" return="V"
   4286       abstract="false" native="false" synchronized="false"
   4287       static="false" final="false" visibility="public"
   4288       deprecated="not deprecated">
   4289       <param name="linkedKeyBinding" type="com.google.inject.spi.LinkedKeyBinding&lt;? extends T&gt;"/>
   4290     </method>
   4291     <method name="visit" return="V"
   4292       abstract="false" native="false" synchronized="false"
   4293       static="false" final="false" visibility="public"
   4294       deprecated="not deprecated">
   4295       <param name="exposedBinding" type="com.google.inject.spi.ExposedBinding&lt;? extends T&gt;"/>
   4296     </method>
   4297     <method name="visit" return="V"
   4298       abstract="false" native="false" synchronized="false"
   4299       static="false" final="false" visibility="public"
   4300       deprecated="not deprecated">
   4301       <param name="untargettedBinding" type="com.google.inject.spi.UntargettedBinding&lt;? extends T&gt;"/>
   4302     </method>
   4303     <method name="visit" return="V"
   4304       abstract="false" native="false" synchronized="false"
   4305       static="false" final="false" visibility="public"
   4306       deprecated="not deprecated">
   4307       <param name="constructorBinding" type="com.google.inject.spi.ConstructorBinding&lt;? extends T&gt;"/>
   4308     </method>
   4309     <method name="visit" return="V"
   4310       abstract="false" native="false" synchronized="false"
   4311       static="false" final="false" visibility="public"
   4312       deprecated="not deprecated">
   4313       <param name="convertedConstantBinding" type="com.google.inject.spi.ConvertedConstantBinding&lt;? extends T&gt;"/>
   4314     </method>
   4315     <method name="visit" return="V"
   4316       abstract="false" native="false" synchronized="false"
   4317       static="false" final="false" visibility="public"
   4318       deprecated="not deprecated">
   4319       <param name="providerBinding" type="com.google.inject.spi.ProviderBinding&lt;? extends T&gt;"/>
   4320     </method>
   4321     <doc>
   4322     <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to {@link
   4323  #visitOther(Binding)}, returning its result.
   4324 
   4325  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4326      {@code return null} if no return type is needed.
   4327 
   4328  @author jessewilson (a] google.com (Jesse Wilson)
   4329  @since 2.0]]>
   4330     </doc>
   4331   </class>
   4332   <!-- end class com.google.inject.spi.DefaultBindingTargetVisitor -->
   4333   <!-- start class com.google.inject.spi.DefaultElementVisitor -->
   4334   <class name="DefaultElementVisitor" extends="java.lang.Object"
   4335     abstract="true"
   4336     static="false" final="false" visibility="public"
   4337     deprecated="not deprecated">
   4338     <implements name="com.google.inject.spi.ElementVisitor&lt;V&gt;"/>
   4339     <constructor name="DefaultElementVisitor"
   4340       static="false" final="false" visibility="public"
   4341       deprecated="not deprecated">
   4342     </constructor>
   4343     <method name="visitOther" return="V"
   4344       abstract="false" native="false" synchronized="false"
   4345       static="false" final="false" visibility="protected"
   4346       deprecated="not deprecated">
   4347       <param name="element" type="com.google.inject.spi.Element"/>
   4348       <doc>
   4349       <![CDATA[Default visit implementation. Returns {@code null}.]]>
   4350       </doc>
   4351     </method>
   4352     <method name="visit" return="V"
   4353       abstract="false" native="false" synchronized="false"
   4354       static="false" final="false" visibility="public"
   4355       deprecated="not deprecated">
   4356       <param name="message" type="com.google.inject.spi.Message"/>
   4357     </method>
   4358     <method name="visit" return="V"
   4359       abstract="false" native="false" synchronized="false"
   4360       static="false" final="false" visibility="public"
   4361       deprecated="not deprecated">
   4362       <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
   4363     </method>
   4364     <method name="visit" return="V"
   4365       abstract="false" native="false" synchronized="false"
   4366       static="false" final="false" visibility="public"
   4367       deprecated="not deprecated">
   4368       <param name="interceptorBinding" type="com.google.inject.spi.InterceptorBinding"/>
   4369     </method>
   4370     <method name="visit" return="V"
   4371       abstract="false" native="false" synchronized="false"
   4372       static="false" final="false" visibility="public"
   4373       deprecated="not deprecated">
   4374       <param name="scopeBinding" type="com.google.inject.spi.ScopeBinding"/>
   4375     </method>
   4376     <method name="visit" return="V"
   4377       abstract="false" native="false" synchronized="false"
   4378       static="false" final="false" visibility="public"
   4379       deprecated="not deprecated">
   4380       <param name="typeConverterBinding" type="com.google.inject.spi.TypeConverterBinding"/>
   4381     </method>
   4382     <method name="visit" return="V"
   4383       abstract="false" native="false" synchronized="false"
   4384       static="false" final="false" visibility="public"
   4385       deprecated="not deprecated">
   4386       <param name="providerLookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
   4387     </method>
   4388     <method name="visit" return="V"
   4389       abstract="false" native="false" synchronized="false"
   4390       static="false" final="false" visibility="public"
   4391       deprecated="not deprecated">
   4392       <param name="injectionRequest" type="com.google.inject.spi.InjectionRequest"/>
   4393     </method>
   4394     <method name="visit" return="V"
   4395       abstract="false" native="false" synchronized="false"
   4396       static="false" final="false" visibility="public"
   4397       deprecated="not deprecated">
   4398       <param name="staticInjectionRequest" type="com.google.inject.spi.StaticInjectionRequest"/>
   4399     </method>
   4400     <method name="visit" return="V"
   4401       abstract="false" native="false" synchronized="false"
   4402       static="false" final="false" visibility="public"
   4403       deprecated="not deprecated">
   4404       <param name="privateElements" type="com.google.inject.spi.PrivateElements"/>
   4405     </method>
   4406     <method name="visit" return="V"
   4407       abstract="false" native="false" synchronized="false"
   4408       static="false" final="false" visibility="public"
   4409       deprecated="not deprecated">
   4410       <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
   4411     </method>
   4412     <method name="visit" return="V"
   4413       abstract="false" native="false" synchronized="false"
   4414       static="false" final="false" visibility="public"
   4415       deprecated="not deprecated">
   4416       <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
   4417     </method>
   4418     <doc>
   4419     <![CDATA[No-op visitor for subclassing. All interface methods simply delegate to
   4420  {@link #visitOther(Element)}, returning its result.
   4421 
   4422  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4423      {@code return null} if no return type is needed.
   4424 
   4425  @author sberlin (a] gmail.com (Sam Berlin)
   4426  @since 2.0]]>
   4427     </doc>
   4428   </class>
   4429   <!-- end class com.google.inject.spi.DefaultElementVisitor -->
   4430   <!-- start class com.google.inject.spi.Dependency -->
   4431   <class name="Dependency" extends="java.lang.Object"
   4432     abstract="false"
   4433     static="false" final="true" visibility="public"
   4434     deprecated="not deprecated">
   4435     <method name="get" return="com.google.inject.spi.Dependency&lt;T&gt;"
   4436       abstract="false" native="false" synchronized="false"
   4437       static="true" final="false" visibility="public"
   4438       deprecated="not deprecated">
   4439       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   4440       <doc>
   4441       <![CDATA[Returns a new dependency that is not attached to an injection point. The returned dependency is
   4442  nullable.]]>
   4443       </doc>
   4444     </method>
   4445     <method name="forInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
   4446       abstract="false" native="false" synchronized="false"
   4447       static="true" final="false" visibility="public"
   4448       deprecated="not deprecated">
   4449       <param name="injectionPoints" type="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"/>
   4450       <doc>
   4451       <![CDATA[Returns the dependencies from the given injection points.]]>
   4452       </doc>
   4453     </method>
   4454     <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
   4455       abstract="false" native="false" synchronized="false"
   4456       static="false" final="false" visibility="public"
   4457       deprecated="not deprecated">
   4458       <doc>
   4459       <![CDATA[Returns the key to the binding that satisfies this dependency.]]>
   4460       </doc>
   4461     </method>
   4462     <method name="isNullable" return="boolean"
   4463       abstract="false" native="false" synchronized="false"
   4464       static="false" final="false" visibility="public"
   4465       deprecated="not deprecated">
   4466       <doc>
   4467       <![CDATA[Returns true if null is a legal value for this dependency.]]>
   4468       </doc>
   4469     </method>
   4470     <method name="getInjectionPoint" return="com.google.inject.spi.InjectionPoint"
   4471       abstract="false" native="false" synchronized="false"
   4472       static="false" final="false" visibility="public"
   4473       deprecated="not deprecated">
   4474       <doc>
   4475       <![CDATA[Returns the injection point to which this dependency belongs, or null if this dependency isn't
   4476  attached to a particular injection point.]]>
   4477       </doc>
   4478     </method>
   4479     <method name="getParameterIndex" return="int"
   4480       abstract="false" native="false" synchronized="false"
   4481       static="false" final="false" visibility="public"
   4482       deprecated="not deprecated">
   4483       <doc>
   4484       <![CDATA[Returns the index of this dependency in the injection point's parameter list, or {@code -1} if
   4485  this dependency does not belong to a parameter list. Only method and constuctor dependencies
   4486  are elements in a parameter list.]]>
   4487       </doc>
   4488     </method>
   4489     <method name="hashCode" return="int"
   4490       abstract="false" native="false" synchronized="false"
   4491       static="false" final="false" visibility="public"
   4492       deprecated="not deprecated">
   4493     </method>
   4494     <method name="equals" return="boolean"
   4495       abstract="false" native="false" synchronized="false"
   4496       static="false" final="false" visibility="public"
   4497       deprecated="not deprecated">
   4498       <param name="o" type="java.lang.Object"/>
   4499     </method>
   4500     <method name="toString" return="java.lang.String"
   4501       abstract="false" native="false" synchronized="false"
   4502       static="false" final="false" visibility="public"
   4503       deprecated="not deprecated">
   4504     </method>
   4505     <doc>
   4506     <![CDATA[A variable that can be resolved by an injector.
   4507 
   4508  <p>Use {@link #get} to build a freestanding dependency, or {@link InjectionPoint} to build one
   4509  that's attached to a constructor, method or field.
   4510 
   4511  @author crazybob (a] google.com (Bob Lee)
   4512  @author jessewilson (a] google.com (Jesse Wilson)
   4513  @since 2.0]]>
   4514     </doc>
   4515   </class>
   4516   <!-- end class com.google.inject.spi.Dependency -->
   4517   <!-- start interface com.google.inject.spi.Element -->
   4518   <interface name="Element"    abstract="true"
   4519     static="false" final="false" visibility="public"
   4520     deprecated="not deprecated">
   4521     <method name="getSource" return="java.lang.Object"
   4522       abstract="false" native="false" synchronized="false"
   4523       static="false" final="false" visibility="public"
   4524       deprecated="not deprecated">
   4525       <doc>
   4526       <![CDATA[Returns an arbitrary object containing information about the "place" where this element was
   4527  configured. Used by Guice in the production of descriptive error messages.
   4528 
   4529  <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
   4530  example. Tools should simply call {@code toString()} on the source object if the type is
   4531  unfamiliar.]]>
   4532       </doc>
   4533     </method>
   4534     <method name="acceptVisitor" return="T"
   4535       abstract="false" native="false" synchronized="false"
   4536       static="false" final="false" visibility="public"
   4537       deprecated="not deprecated">
   4538       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   4539       <doc>
   4540       <![CDATA[Accepts an element visitor. Invokes the visitor method specific to this element's type.
   4541 
   4542  @param visitor to call back on]]>
   4543       </doc>
   4544     </method>
   4545     <method name="applyTo"
   4546       abstract="false" native="false" synchronized="false"
   4547       static="false" final="false" visibility="public"
   4548       deprecated="not deprecated">
   4549       <param name="binder" type="com.google.inject.Binder"/>
   4550       <doc>
   4551       <![CDATA[Writes this module element to the given binder (optional operation).
   4552 
   4553  @param binder to apply configuration element to
   4554  @throws UnsupportedOperationException if the {@code applyTo} method is not supported by this
   4555      element.]]>
   4556       </doc>
   4557     </method>
   4558     <doc>
   4559     <![CDATA[A core component of a module or injector.
   4560 
   4561  <p>The elements of a module can be inspected, validated and rewritten. Use {@link
   4562  Elements#getElements(com.google.inject.Module[]) Elements.getElements()} to read the elements
   4563  from a module, and {@link Elements#getModule(Iterable) Elements.getModule()} to rewrite them.
   4564  This can be used for static analysis and generation of Guice modules.
   4565 
   4566  <p>The elements of an injector can be inspected and exercised. Use {@link
   4567  com.google.inject.Injector#getBindings Injector.getBindings()} to reflect on Guice injectors.
   4568 
   4569  @author jessewilson (a] google.com (Jesse Wilson)
   4570  @author crazybob (a] google.com (Bob Lee)
   4571  @since 2.0]]>
   4572     </doc>
   4573   </interface>
   4574   <!-- end interface com.google.inject.spi.Element -->
   4575   <!-- start class com.google.inject.spi.Elements -->
   4576   <class name="Elements" extends="java.lang.Object"
   4577     abstract="false"
   4578     static="false" final="true" visibility="public"
   4579     deprecated="not deprecated">
   4580     <constructor name="Elements"
   4581       static="false" final="false" visibility="public"
   4582       deprecated="not deprecated">
   4583     </constructor>
   4584     <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
   4585       abstract="false" native="false" synchronized="false"
   4586       static="true" final="false" visibility="public"
   4587       deprecated="not deprecated">
   4588       <param name="modules" type="com.google.inject.Module[]"/>
   4589       <doc>
   4590       <![CDATA[Records the elements executed by {@code modules}.]]>
   4591       </doc>
   4592     </method>
   4593     <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
   4594       abstract="false" native="false" synchronized="false"
   4595       static="true" final="false" visibility="public"
   4596       deprecated="not deprecated">
   4597       <param name="stage" type="com.google.inject.Stage"/>
   4598       <param name="modules" type="com.google.inject.Module[]"/>
   4599       <doc>
   4600       <![CDATA[Records the elements executed by {@code modules}.]]>
   4601       </doc>
   4602     </method>
   4603     <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
   4604       abstract="false" native="false" synchronized="false"
   4605       static="true" final="false" visibility="public"
   4606       deprecated="not deprecated">
   4607       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   4608       <doc>
   4609       <![CDATA[Records the elements executed by {@code modules}.]]>
   4610       </doc>
   4611     </method>
   4612     <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
   4613       abstract="false" native="false" synchronized="false"
   4614       static="true" final="false" visibility="public"
   4615       deprecated="not deprecated">
   4616       <param name="stage" type="com.google.inject.Stage"/>
   4617       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   4618       <doc>
   4619       <![CDATA[Records the elements executed by {@code modules}.]]>
   4620       </doc>
   4621     </method>
   4622     <method name="getModule" return="com.google.inject.Module"
   4623       abstract="false" native="false" synchronized="false"
   4624       static="true" final="false" visibility="public"
   4625       deprecated="not deprecated">
   4626       <param name="elements" type="java.lang.Iterable&lt;? extends com.google.inject.spi.Element&gt;"/>
   4627       <doc>
   4628       <![CDATA[Returns the module composed of {@code elements}.]]>
   4629       </doc>
   4630     </method>
   4631     <doc>
   4632     <![CDATA[Exposes elements of a module so they can be inspected, validated or {@link
   4633  Element#applyTo(Binder) rewritten}.
   4634 
   4635  @author jessewilson (a] google.com (Jesse Wilson)
   4636  @since 2.0]]>
   4637     </doc>
   4638   </class>
   4639   <!-- end class com.google.inject.spi.Elements -->
   4640   <!-- start interface com.google.inject.spi.ElementVisitor -->
   4641   <interface name="ElementVisitor"    abstract="true"
   4642     static="false" final="false" visibility="public"
   4643     deprecated="not deprecated">
   4644     <method name="visit" return="V"
   4645       abstract="false" native="false" synchronized="false"
   4646       static="false" final="false" visibility="public"
   4647       deprecated="not deprecated">
   4648       <param name="binding" type="com.google.inject.Binding&lt;T&gt;"/>
   4649       <doc>
   4650       <![CDATA[Visit a mapping from a key (type and optional annotation) to the strategy for getting
   4651  instances of the type.]]>
   4652       </doc>
   4653     </method>
   4654     <method name="visit" return="V"
   4655       abstract="false" native="false" synchronized="false"
   4656       static="false" final="false" visibility="public"
   4657       deprecated="not deprecated">
   4658       <param name="binding" type="com.google.inject.spi.InterceptorBinding"/>
   4659       <doc>
   4660       <![CDATA[Visit a registration of interceptors for matching methods of matching classes.]]>
   4661       </doc>
   4662     </method>
   4663     <method name="visit" return="V"
   4664       abstract="false" native="false" synchronized="false"
   4665       static="false" final="false" visibility="public"
   4666       deprecated="not deprecated">
   4667       <param name="binding" type="com.google.inject.spi.ScopeBinding"/>
   4668       <doc>
   4669       <![CDATA[Visit a registration of a scope annotation with the scope that implements it.]]>
   4670       </doc>
   4671     </method>
   4672     <method name="visit" return="V"
   4673       abstract="false" native="false" synchronized="false"
   4674       static="false" final="false" visibility="public"
   4675       deprecated="not deprecated">
   4676       <param name="binding" type="com.google.inject.spi.TypeConverterBinding"/>
   4677       <doc>
   4678       <![CDATA[Visit a registration of type converters for matching target types.]]>
   4679       </doc>
   4680     </method>
   4681     <method name="visit" return="V"
   4682       abstract="false" native="false" synchronized="false"
   4683       static="false" final="false" visibility="public"
   4684       deprecated="not deprecated">
   4685       <param name="request" type="com.google.inject.spi.InjectionRequest"/>
   4686       <doc>
   4687       <![CDATA[Visit a request to inject the instance fields and methods of an instance.]]>
   4688       </doc>
   4689     </method>
   4690     <method name="visit" return="V"
   4691       abstract="false" native="false" synchronized="false"
   4692       static="false" final="false" visibility="public"
   4693       deprecated="not deprecated">
   4694       <param name="request" type="com.google.inject.spi.StaticInjectionRequest"/>
   4695       <doc>
   4696       <![CDATA[Visit a request to inject the static fields and methods of type.]]>
   4697       </doc>
   4698     </method>
   4699     <method name="visit" return="V"
   4700       abstract="false" native="false" synchronized="false"
   4701       static="false" final="false" visibility="public"
   4702       deprecated="not deprecated">
   4703       <param name="lookup" type="com.google.inject.spi.ProviderLookup&lt;T&gt;"/>
   4704       <doc>
   4705       <![CDATA[Visit a lookup of the provider for a type.]]>
   4706       </doc>
   4707     </method>
   4708     <method name="visit" return="V"
   4709       abstract="false" native="false" synchronized="false"
   4710       static="false" final="false" visibility="public"
   4711       deprecated="not deprecated">
   4712       <param name="lookup" type="com.google.inject.spi.MembersInjectorLookup&lt;T&gt;"/>
   4713       <doc>
   4714       <![CDATA[Visit a lookup of the members injector.]]>
   4715       </doc>
   4716     </method>
   4717     <method name="visit" return="V"
   4718       abstract="false" native="false" synchronized="false"
   4719       static="false" final="false" visibility="public"
   4720       deprecated="not deprecated">
   4721       <param name="message" type="com.google.inject.spi.Message"/>
   4722       <doc>
   4723       <![CDATA[Visit an error message and the context in which it occured.]]>
   4724       </doc>
   4725     </method>
   4726     <method name="visit" return="V"
   4727       abstract="false" native="false" synchronized="false"
   4728       static="false" final="false" visibility="public"
   4729       deprecated="not deprecated">
   4730       <param name="elements" type="com.google.inject.spi.PrivateElements"/>
   4731       <doc>
   4732       <![CDATA[Visit a collection of configuration elements for a {@linkplain com.google.inject.PrivateBinder
   4733  private binder}.]]>
   4734       </doc>
   4735     </method>
   4736     <method name="visit" return="V"
   4737       abstract="false" native="false" synchronized="false"
   4738       static="false" final="false" visibility="public"
   4739       deprecated="not deprecated">
   4740       <param name="binding" type="com.google.inject.spi.TypeListenerBinding"/>
   4741       <doc>
   4742       <![CDATA[Visit an injectable type listener binding.]]>
   4743       </doc>
   4744     </method>
   4745     <doc>
   4746     <![CDATA[Visit elements.
   4747 
   4748  @param <V> any type to be returned by the visit method. Use {@link Void} with
   4749      {@code return null} if no return type is needed.
   4750  
   4751  @since 2.0]]>
   4752     </doc>
   4753   </interface>
   4754   <!-- end interface com.google.inject.spi.ElementVisitor -->
   4755   <!-- start interface com.google.inject.spi.ExposedBinding -->
   4756   <interface name="ExposedBinding"    abstract="true"
   4757     static="false" final="false" visibility="public"
   4758     deprecated="not deprecated">
   4759     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   4760     <implements name="com.google.inject.spi.HasDependencies"/>
   4761     <method name="getPrivateElements" return="com.google.inject.spi.PrivateElements"
   4762       abstract="false" native="false" synchronized="false"
   4763       static="false" final="false" visibility="public"
   4764       deprecated="not deprecated">
   4765       <doc>
   4766       <![CDATA[Returns the enclosed environment that holds the original binding.]]>
   4767       </doc>
   4768     </method>
   4769     <method name="applyTo"
   4770       abstract="false" native="false" synchronized="false"
   4771       static="false" final="false" visibility="public"
   4772       deprecated="not deprecated">
   4773       <param name="binder" type="com.google.inject.Binder"/>
   4774       <doc>
   4775       <![CDATA[Unsupported. Always throws {@link UnsupportedOperationException}.]]>
   4776       </doc>
   4777     </method>
   4778     <doc>
   4779     <![CDATA[A binding to a key exposed from an enclosed private environment.
   4780 
   4781  @author jessewilson (a] google.com (Jesse Wilson)
   4782  @since 2.0]]>
   4783     </doc>
   4784   </interface>
   4785   <!-- end interface com.google.inject.spi.ExposedBinding -->
   4786   <!-- start interface com.google.inject.spi.HasDependencies -->
   4787   <interface name="HasDependencies"    abstract="true"
   4788     static="false" final="false" visibility="public"
   4789     deprecated="not deprecated">
   4790     <method name="getDependencies" return="java.util.Set&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
   4791       abstract="false" native="false" synchronized="false"
   4792       static="false" final="false" visibility="public"
   4793       deprecated="not deprecated">
   4794       <doc>
   4795       <![CDATA[Returns the known dependencies for this type. If this has dependencies whose values are not
   4796  known statically, a dependency for the {@link com.google.inject.Injector Injector} will be
   4797  included in the returned set.
   4798  
   4799  @return a possibly empty set]]>
   4800       </doc>
   4801     </method>
   4802     <doc>
   4803     <![CDATA[Implemented by {@link com.google.inject.Binding bindings}, {@link com.google.inject.Provider
   4804  providers} and instances that expose their dependencies explicitly.
   4805 
   4806  @author jessewilson (a] google.com (Jesse Wilson)
   4807  @since 2.0]]>
   4808     </doc>
   4809   </interface>
   4810   <!-- end interface com.google.inject.spi.HasDependencies -->
   4811   <!-- start interface com.google.inject.spi.InjectionListener -->
   4812   <interface name="InjectionListener"    abstract="true"
   4813     static="false" final="false" visibility="public"
   4814     deprecated="not deprecated">
   4815     <method name="afterInjection"
   4816       abstract="false" native="false" synchronized="false"
   4817       static="false" final="false" visibility="public"
   4818       deprecated="not deprecated">
   4819       <param name="injectee" type="I"/>
   4820       <doc>
   4821       <![CDATA[Invoked by Guice after it injects the fields and methods of instance.
   4822 
   4823  @param injectee instance that Guice injected dependencies into]]>
   4824       </doc>
   4825     </method>
   4826     <doc>
   4827     <![CDATA[Listens for injections into instances of type {@code I}. Useful for performing further
   4828  injections, post-injection initialization, and more.
   4829 
   4830  @author crazybob (a] google.com (Bob Lee)
   4831  @author jessewilson (a] google.com (Jesse Wilson)
   4832  @since 2.0]]>
   4833     </doc>
   4834   </interface>
   4835   <!-- end interface com.google.inject.spi.InjectionListener -->
   4836   <!-- start class com.google.inject.spi.InjectionPoint -->
   4837   <class name="InjectionPoint" extends="java.lang.Object"
   4838     abstract="false"
   4839     static="false" final="true" visibility="public"
   4840     deprecated="not deprecated">
   4841     <method name="getMember" return="java.lang.reflect.Member"
   4842       abstract="false" native="false" synchronized="false"
   4843       static="false" final="false" visibility="public"
   4844       deprecated="not deprecated">
   4845       <doc>
   4846       <![CDATA[Returns the injected constructor, field, or method.]]>
   4847       </doc>
   4848     </method>
   4849     <method name="getDependencies" return="java.util.List&lt;com.google.inject.spi.Dependency&lt;?&gt;&gt;"
   4850       abstract="false" native="false" synchronized="false"
   4851       static="false" final="false" visibility="public"
   4852       deprecated="not deprecated">
   4853       <doc>
   4854       <![CDATA[Returns the dependencies for this injection point. If the injection point is for a method or
   4855  constructor, the dependencies will correspond to that member's parameters. Field injection
   4856  points always have a single dependency for the field itself.
   4857 
   4858  @return a possibly-empty list]]>
   4859       </doc>
   4860     </method>
   4861     <method name="isOptional" return="boolean"
   4862       abstract="false" native="false" synchronized="false"
   4863       static="false" final="false" visibility="public"
   4864       deprecated="not deprecated">
   4865       <doc>
   4866       <![CDATA[Returns true if this injection point shall be skipped if the injector cannot resolve bindings
   4867  for all required dependencies. Both explicit bindings (as specified in a module), and implicit
   4868  bindings ({@literal @}{@link com.google.inject.ImplementedBy ImplementedBy}, default
   4869  constructors etc.) may be used to satisfy optional injection points.]]>
   4870       </doc>
   4871     </method>
   4872     <method name="equals" return="boolean"
   4873       abstract="false" native="false" synchronized="false"
   4874       static="false" final="false" visibility="public"
   4875       deprecated="not deprecated">
   4876       <param name="o" type="java.lang.Object"/>
   4877     </method>
   4878     <method name="hashCode" return="int"
   4879       abstract="false" native="false" synchronized="false"
   4880       static="false" final="false" visibility="public"
   4881       deprecated="not deprecated">
   4882     </method>
   4883     <method name="toString" return="java.lang.String"
   4884       abstract="false" native="false" synchronized="false"
   4885       static="false" final="false" visibility="public"
   4886       deprecated="not deprecated">
   4887     </method>
   4888     <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
   4889       abstract="false" native="false" synchronized="false"
   4890       static="true" final="false" visibility="public"
   4891       deprecated="not deprecated">
   4892       <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   4893       <doc>
   4894       <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
   4895 
   4896  @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
   4897      or a no-arguments constructor that is not private.
   4898  @throws ConfigurationException if there is no injectable constructor, more than one injectable
   4899      constructor, or if parameters of the injectable constructor are malformed, such as a
   4900      parameter with multiple binding annotations.]]>
   4901       </doc>
   4902     </method>
   4903     <method name="forConstructorOf" return="com.google.inject.spi.InjectionPoint"
   4904       abstract="false" native="false" synchronized="false"
   4905       static="true" final="false" visibility="public"
   4906       deprecated="not deprecated">
   4907       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   4908       <doc>
   4909       <![CDATA[Returns a new injection point for the injectable constructor of {@code type}.
   4910 
   4911  @param type a concrete type with exactly one constructor annotated {@literal @}{@link Inject},
   4912      or a no-arguments constructor that is not private.
   4913  @throws ConfigurationException if there is no injectable constructor, more than one injectable
   4914      constructor, or if parameters of the injectable constructor are malformed, such as a
   4915      parameter with multiple binding annotations.]]>
   4916       </doc>
   4917     </method>
   4918     <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   4919       abstract="false" native="false" synchronized="false"
   4920       static="true" final="false" visibility="public"
   4921       deprecated="not deprecated">
   4922       <param name="type" type="com.google.inject.TypeLiteral"/>
   4923       <doc>
   4924       <![CDATA[Returns all static method and field injection points on {@code type}.
   4925 
   4926  @return a possibly empty set of injection points. The set has a specified iteration order. All
   4927       fields are returned and then all methods. Within the fields, supertype fields are returned
   4928       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   4929  @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
   4930       a field with multiple binding annotations. The exception's {@link
   4931       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   4932       of the valid injection points.]]>
   4933       </doc>
   4934     </method>
   4935     <method name="forStaticMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   4936       abstract="false" native="false" synchronized="false"
   4937       static="true" final="false" visibility="public"
   4938       deprecated="not deprecated">
   4939       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   4940       <doc>
   4941       <![CDATA[Returns all static method and field injection points on {@code type}.
   4942 
   4943  @return a possibly empty set of injection points. The set has a specified iteration order. All
   4944       fields are returned and then all methods. Within the fields, supertype fields are returned
   4945       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   4946  @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
   4947       a field with multiple binding annotations. The exception's {@link
   4948       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   4949       of the valid injection points.]]>
   4950       </doc>
   4951     </method>
   4952     <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   4953       abstract="false" native="false" synchronized="false"
   4954       static="true" final="false" visibility="public"
   4955       deprecated="not deprecated">
   4956       <param name="type" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   4957       <doc>
   4958       <![CDATA[Returns all instance method and field injection points on {@code type}.
   4959 
   4960  @return a possibly empty set of injection points. The set has a specified iteration order. All
   4961       fields are returned and then all methods. Within the fields, supertype fields are returned
   4962       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   4963  @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
   4964       a field with multiple binding annotations. The exception's {@link
   4965       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   4966       of the valid injection points.]]>
   4967       </doc>
   4968     </method>
   4969     <method name="forInstanceMethodsAndFields" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   4970       abstract="false" native="false" synchronized="false"
   4971       static="true" final="false" visibility="public"
   4972       deprecated="not deprecated">
   4973       <param name="type" type="java.lang.Class&lt;?&gt;"/>
   4974       <doc>
   4975       <![CDATA[Returns all instance method and field injection points on {@code type}.
   4976 
   4977  @return a possibly empty set of injection points. The set has a specified iteration order. All
   4978       fields are returned and then all methods. Within the fields, supertype fields are returned
   4979       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   4980  @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
   4981       a field with multiple binding annotations. The exception's {@link
   4982       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   4983       of the valid injection points.]]>
   4984       </doc>
   4985     </method>
   4986     <doc>
   4987     <![CDATA[A constructor, field or method that can receive injections. Typically this is a member with the
   4988  {@literal @}{@link Inject} annotation. For non-private, no argument constructors, the member may
   4989  omit the annotation. 
   4990 
   4991  @author crazybob (a] google.com (Bob Lee)
   4992  @since 2.0]]>
   4993     </doc>
   4994   </class>
   4995   <!-- end class com.google.inject.spi.InjectionPoint -->
   4996   <!-- start class com.google.inject.spi.InjectionRequest -->
   4997   <class name="InjectionRequest" extends="java.lang.Object"
   4998     abstract="false"
   4999     static="false" final="true" visibility="public"
   5000     deprecated="not deprecated">
   5001     <implements name="com.google.inject.spi.Element"/>
   5002     <constructor name="InjectionRequest" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;, T"
   5003       static="false" final="false" visibility="public"
   5004       deprecated="not deprecated">
   5005     </constructor>
   5006     <method name="getSource" return="java.lang.Object"
   5007       abstract="false" native="false" synchronized="false"
   5008       static="false" final="false" visibility="public"
   5009       deprecated="not deprecated">
   5010     </method>
   5011     <method name="getInstance" return="T"
   5012       abstract="false" native="false" synchronized="false"
   5013       static="false" final="false" visibility="public"
   5014       deprecated="not deprecated">
   5015     </method>
   5016     <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
   5017       abstract="false" native="false" synchronized="false"
   5018       static="false" final="false" visibility="public"
   5019       deprecated="not deprecated">
   5020     </method>
   5021     <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   5022       abstract="false" native="false" synchronized="false"
   5023       static="false" final="false" visibility="public"
   5024       deprecated="not deprecated">
   5025       <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
   5026       <doc>
   5027       <![CDATA[Returns the instance methods and fields of {@code instance} that will be injected to fulfill
   5028  this request.
   5029 
   5030  @return a possibly empty set of injection points. The set has a specified iteration order. All
   5031       fields are returned and then all methods. Within the fields, supertype fields are returned
   5032       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   5033  @throws ConfigurationException if there is a malformed injection point on the class of {@code
   5034       instance}, such as a field with multiple binding annotations. The exception's {@link
   5035       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   5036       of the valid injection points.]]>
   5037       </doc>
   5038     </method>
   5039     <method name="acceptVisitor" return="R"
   5040       abstract="false" native="false" synchronized="false"
   5041       static="false" final="false" visibility="public"
   5042       deprecated="not deprecated">
   5043       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;R&gt;"/>
   5044     </method>
   5045     <method name="applyTo"
   5046       abstract="false" native="false" synchronized="false"
   5047       static="false" final="false" visibility="public"
   5048       deprecated="not deprecated">
   5049       <param name="binder" type="com.google.inject.Binder"/>
   5050     </method>
   5051     <doc>
   5052     <![CDATA[A request to inject the instance fields and methods of an instance. Requests are created
   5053  explicitly in a module using {@link com.google.inject.Binder#requestInjection(Object)
   5054  requestInjection()} statements:
   5055  <pre>
   5056      requestInjection(serviceInstance);</pre>
   5057 
   5058  @author mikeward (a] google.com (Mike Ward)
   5059  @since 2.0]]>
   5060     </doc>
   5061   </class>
   5062   <!-- end class com.google.inject.spi.InjectionRequest -->
   5063   <!-- start interface com.google.inject.spi.InstanceBinding -->
   5064   <interface name="InstanceBinding"    abstract="true"
   5065     static="false" final="false" visibility="public"
   5066     deprecated="not deprecated">
   5067     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5068     <implements name="com.google.inject.spi.HasDependencies"/>
   5069     <method name="getInstance" return="T"
   5070       abstract="false" native="false" synchronized="false"
   5071       static="false" final="false" visibility="public"
   5072       deprecated="not deprecated">
   5073       <doc>
   5074       <![CDATA[Returns the user-supplied instance.]]>
   5075       </doc>
   5076     </method>
   5077     <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   5078       abstract="false" native="false" synchronized="false"
   5079       static="false" final="false" visibility="public"
   5080       deprecated="not deprecated">
   5081       <doc>
   5082       <![CDATA[Returns the field and method injection points of the instance, injected at injector-creation
   5083  time only.
   5084 
   5085  @return a possibly empty set]]>
   5086       </doc>
   5087     </method>
   5088     <doc>
   5089     <![CDATA[A binding to a single instance. The same instance is returned for every injection.
   5090 
   5091  @author jessewilson (a] google.com (Jesse Wilson)
   5092  @since 2.0]]>
   5093     </doc>
   5094   </interface>
   5095   <!-- end interface com.google.inject.spi.InstanceBinding -->
   5096   <!-- start class com.google.inject.spi.InterceptorBinding -->
   5097   <class name="InterceptorBinding" extends="java.lang.Object"
   5098     abstract="false"
   5099     static="false" final="true" visibility="public"
   5100     deprecated="not deprecated">
   5101     <implements name="com.google.inject.spi.Element"/>
   5102     <method name="getSource" return="java.lang.Object"
   5103       abstract="false" native="false" synchronized="false"
   5104       static="false" final="false" visibility="public"
   5105       deprecated="not deprecated">
   5106     </method>
   5107     <method name="getClassMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.Class&lt;?&gt;&gt;"
   5108       abstract="false" native="false" synchronized="false"
   5109       static="false" final="false" visibility="public"
   5110       deprecated="not deprecated">
   5111     </method>
   5112     <method name="getMethodMatcher" return="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"
   5113       abstract="false" native="false" synchronized="false"
   5114       static="false" final="false" visibility="public"
   5115       deprecated="not deprecated">
   5116     </method>
   5117     <method name="getInterceptors" return="java.util.List&lt;MethodInterceptor&gt;"
   5118       abstract="false" native="false" synchronized="false"
   5119       static="false" final="false" visibility="public"
   5120       deprecated="not deprecated">
   5121     </method>
   5122     <method name="acceptVisitor" return="T"
   5123       abstract="false" native="false" synchronized="false"
   5124       static="false" final="false" visibility="public"
   5125       deprecated="not deprecated">
   5126       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5127     </method>
   5128     <method name="applyTo"
   5129       abstract="false" native="false" synchronized="false"
   5130       static="false" final="false" visibility="public"
   5131       deprecated="not deprecated">
   5132       <param name="binder" type="com.google.inject.Binder"/>
   5133     </method>
   5134     <doc>
   5135     <![CDATA[Registration of interceptors for matching methods of matching classes. Instances are created
   5136  explicitly in a module using {@link com.google.inject.Binder#bindInterceptor(
   5137  Matcher, Matcher, MethodInterceptor[]) bindInterceptor()} statements:
   5138  <pre>
   5139      bindInterceptor(Matchers.subclassesOf(MyAction.class),
   5140          Matchers.annotatedWith(Transactional.class),
   5141          new MyTransactionInterceptor());</pre>
   5142 
   5143  or from an injectable type listener using {@link TypeEncounter#bindInterceptor(Matcher,
   5144  org.aopalliance.intercept.MethodInterceptor[]) TypeEncounter.bindInterceptor()}.
   5145 
   5146  @author jessewilson (a] google.com (Jesse Wilson)
   5147  @since 2.0]]>
   5148     </doc>
   5149   </class>
   5150   <!-- end class com.google.inject.spi.InterceptorBinding -->
   5151   <!-- start interface com.google.inject.spi.LinkedKeyBinding -->
   5152   <interface name="LinkedKeyBinding"    abstract="true"
   5153     static="false" final="false" visibility="public"
   5154     deprecated="not deprecated">
   5155     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5156     <method name="getLinkedKey" return="com.google.inject.Key&lt;? extends T&gt;"
   5157       abstract="false" native="false" synchronized="false"
   5158       static="false" final="false" visibility="public"
   5159       deprecated="not deprecated">
   5160       <doc>
   5161       <![CDATA[Returns the linked key used to resolve injections. That binding can be retrieved from an
   5162  injector using {@link com.google.inject.Injector#getBinding(Key) Injector.getBinding(key)}.]]>
   5163       </doc>
   5164     </method>
   5165     <doc>
   5166     <![CDATA[A binding to a linked key. The other key's binding is used to resolve injections.
   5167 
   5168  @author jessewilson (a] google.com (Jesse Wilson)
   5169  @since 2.0]]>
   5170     </doc>
   5171   </interface>
   5172   <!-- end interface com.google.inject.spi.LinkedKeyBinding -->
   5173   <!-- start class com.google.inject.spi.MembersInjectorLookup -->
   5174   <class name="MembersInjectorLookup" extends="java.lang.Object"
   5175     abstract="false"
   5176     static="false" final="true" visibility="public"
   5177     deprecated="not deprecated">
   5178     <implements name="com.google.inject.spi.Element"/>
   5179     <constructor name="MembersInjectorLookup" type="java.lang.Object, com.google.inject.TypeLiteral&lt;T&gt;"
   5180       static="false" final="false" visibility="public"
   5181       deprecated="not deprecated">
   5182     </constructor>
   5183     <method name="getSource" return="java.lang.Object"
   5184       abstract="false" native="false" synchronized="false"
   5185       static="false" final="false" visibility="public"
   5186       deprecated="not deprecated">
   5187     </method>
   5188     <method name="getType" return="com.google.inject.TypeLiteral&lt;T&gt;"
   5189       abstract="false" native="false" synchronized="false"
   5190       static="false" final="false" visibility="public"
   5191       deprecated="not deprecated">
   5192       <doc>
   5193       <![CDATA[Gets the type containing the members to be injected.]]>
   5194       </doc>
   5195     </method>
   5196     <method name="acceptVisitor" return="T"
   5197       abstract="false" native="false" synchronized="false"
   5198       static="false" final="false" visibility="public"
   5199       deprecated="not deprecated">
   5200       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5201     </method>
   5202     <method name="initializeDelegate"
   5203       abstract="false" native="false" synchronized="false"
   5204       static="false" final="false" visibility="public"
   5205       deprecated="not deprecated">
   5206       <param name="delegate" type="com.google.inject.MembersInjector&lt;T&gt;"/>
   5207       <doc>
   5208       <![CDATA[Sets the actual members injector.
   5209 
   5210  @throws IllegalStateException if the delegate is already set]]>
   5211       </doc>
   5212     </method>
   5213     <method name="applyTo"
   5214       abstract="false" native="false" synchronized="false"
   5215       static="false" final="false" visibility="public"
   5216       deprecated="not deprecated">
   5217       <param name="binder" type="com.google.inject.Binder"/>
   5218     </method>
   5219     <method name="getDelegate" return="com.google.inject.MembersInjector&lt;T&gt;"
   5220       abstract="false" native="false" synchronized="false"
   5221       static="false" final="false" visibility="public"
   5222       deprecated="not deprecated">
   5223       <doc>
   5224       <![CDATA[Returns the delegate members injector, or {@code null} if it has not yet been initialized.
   5225  The delegate will be initialized when this element is processed, or otherwise used to create
   5226  an injector.]]>
   5227       </doc>
   5228     </method>
   5229     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   5230       abstract="false" native="false" synchronized="false"
   5231       static="false" final="false" visibility="public"
   5232       deprecated="not deprecated">
   5233       <doc>
   5234       <![CDATA[Returns the looked up members injector. The result is not valid until this lookup has been
   5235  initialized, which usually happens when the injector is created. The members injector will
   5236  throw an {@code IllegalStateException} if you try to use it beforehand.]]>
   5237       </doc>
   5238     </method>
   5239     <doc>
   5240     <![CDATA[A lookup of the members injector for a type. Lookups are created explicitly in a module using
   5241  {@link com.google.inject.Binder#getMembersInjector(Class) getMembersInjector()} statements:
   5242  <pre>
   5243      MembersInjector&lt;PaymentService&gt; membersInjector
   5244          = getMembersInjector(PaymentService.class);</pre>
   5245 
   5246  @author crazybob (a] google.com (Bob Lee)
   5247  @since 2.0]]>
   5248     </doc>
   5249   </class>
   5250   <!-- end class com.google.inject.spi.MembersInjectorLookup -->
   5251   <!-- start class com.google.inject.spi.Message -->
   5252   <class name="Message" extends="java.lang.Object"
   5253     abstract="false"
   5254     static="false" final="true" visibility="public"
   5255     deprecated="not deprecated">
   5256     <implements name="java.io.Serializable"/>
   5257     <implements name="com.google.inject.spi.Element"/>
   5258     <constructor name="Message" type="java.util.List&lt;java.lang.Object&gt;, java.lang.String, java.lang.Throwable"
   5259       static="false" final="false" visibility="public"
   5260       deprecated="not deprecated">
   5261       <doc>
   5262       <![CDATA[@since 2.0]]>
   5263       </doc>
   5264     </constructor>
   5265     <constructor name="Message" type="java.lang.Object, java.lang.String"
   5266       static="false" final="false" visibility="public"
   5267       deprecated="not deprecated">
   5268     </constructor>
   5269     <constructor name="Message" type="java.lang.String"
   5270       static="false" final="false" visibility="public"
   5271       deprecated="not deprecated">
   5272     </constructor>
   5273     <method name="getSource" return="java.lang.String"
   5274       abstract="false" native="false" synchronized="false"
   5275       static="false" final="false" visibility="public"
   5276       deprecated="not deprecated">
   5277     </method>
   5278     <method name="getSources" return="java.util.List&lt;java.lang.Object&gt;"
   5279       abstract="false" native="false" synchronized="false"
   5280       static="false" final="false" visibility="public"
   5281       deprecated="not deprecated">
   5282       <doc>
   5283       <![CDATA[@since 2.0]]>
   5284       </doc>
   5285     </method>
   5286     <method name="getMessage" return="java.lang.String"
   5287       abstract="false" native="false" synchronized="false"
   5288       static="false" final="false" visibility="public"
   5289       deprecated="not deprecated">
   5290       <doc>
   5291       <![CDATA[Gets the error message text.]]>
   5292       </doc>
   5293     </method>
   5294     <method name="acceptVisitor" return="T"
   5295       abstract="false" native="false" synchronized="false"
   5296       static="false" final="false" visibility="public"
   5297       deprecated="not deprecated">
   5298       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5299       <doc>
   5300       <![CDATA[@since 2.0]]>
   5301       </doc>
   5302     </method>
   5303     <method name="getCause" return="java.lang.Throwable"
   5304       abstract="false" native="false" synchronized="false"
   5305       static="false" final="false" visibility="public"
   5306       deprecated="not deprecated">
   5307       <doc>
   5308       <![CDATA[Returns the throwable that caused this message, or {@code null} if this
   5309  message was not caused by a throwable.
   5310 
   5311  @since 2.0]]>
   5312       </doc>
   5313     </method>
   5314     <method name="toString" return="java.lang.String"
   5315       abstract="false" native="false" synchronized="false"
   5316       static="false" final="false" visibility="public"
   5317       deprecated="not deprecated">
   5318     </method>
   5319     <method name="hashCode" return="int"
   5320       abstract="false" native="false" synchronized="false"
   5321       static="false" final="false" visibility="public"
   5322       deprecated="not deprecated">
   5323     </method>
   5324     <method name="equals" return="boolean"
   5325       abstract="false" native="false" synchronized="false"
   5326       static="false" final="false" visibility="public"
   5327       deprecated="not deprecated">
   5328       <param name="o" type="java.lang.Object"/>
   5329     </method>
   5330     <method name="applyTo"
   5331       abstract="false" native="false" synchronized="false"
   5332       static="false" final="false" visibility="public"
   5333       deprecated="not deprecated">
   5334       <param name="binder" type="com.google.inject.Binder"/>
   5335       <doc>
   5336       <![CDATA[@since 2.0]]>
   5337       </doc>
   5338     </method>
   5339     <doc>
   5340     <![CDATA[An error message and the context in which it occured. Messages are usually created internally by
   5341  Guice and its extensions. Messages can be created explicitly in a module using {@link
   5342  com.google.inject.Binder#addError(Throwable) addError()} statements:
   5343  <pre>
   5344      try {
   5345        bindPropertiesFromFile();
   5346      } catch (IOException e) {
   5347        addError(e);
   5348      }</pre>
   5349 
   5350  @author crazybob (a] google.com (Bob Lee)]]>
   5351     </doc>
   5352   </class>
   5353   <!-- end class com.google.inject.spi.Message -->
   5354   <!-- start interface com.google.inject.spi.PrivateElements -->
   5355   <interface name="PrivateElements"    abstract="true"
   5356     static="false" final="false" visibility="public"
   5357     deprecated="not deprecated">
   5358     <implements name="com.google.inject.spi.Element"/>
   5359     <method name="getElements" return="java.util.List&lt;com.google.inject.spi.Element&gt;"
   5360       abstract="false" native="false" synchronized="false"
   5361       static="false" final="false" visibility="public"
   5362       deprecated="not deprecated">
   5363       <doc>
   5364       <![CDATA[Returns the configuration information in this private environment.]]>
   5365       </doc>
   5366     </method>
   5367     <method name="getInjector" return="com.google.inject.Injector"
   5368       abstract="false" native="false" synchronized="false"
   5369       static="false" final="false" visibility="public"
   5370       deprecated="not deprecated">
   5371       <doc>
   5372       <![CDATA[Returns the child injector that hosts these private elements, or null if the elements haven't
   5373  been used to create an injector.]]>
   5374       </doc>
   5375     </method>
   5376     <method name="getExposedKeys" return="java.util.Set&lt;com.google.inject.Key&lt;?&gt;&gt;"
   5377       abstract="false" native="false" synchronized="false"
   5378       static="false" final="false" visibility="public"
   5379       deprecated="not deprecated">
   5380       <doc>
   5381       <![CDATA[Returns the unique exposed keys for these private elements.]]>
   5382       </doc>
   5383     </method>
   5384     <method name="getExposedSource" return="java.lang.Object"
   5385       abstract="false" native="false" synchronized="false"
   5386       static="false" final="false" visibility="public"
   5387       deprecated="not deprecated">
   5388       <param name="key" type="com.google.inject.Key&lt;?&gt;"/>
   5389       <doc>
   5390       <![CDATA[Returns an arbitrary object containing information about the "place" where this key was
   5391  exposed. Used by Guice in the production of descriptive error messages.
   5392 
   5393  <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
   5394  example. Tools should simply call {@code toString()} on the source object if the type is
   5395  unfamiliar.
   5396 
   5397  @param key one of the keys exposed by this module.]]>
   5398       </doc>
   5399     </method>
   5400     <doc>
   5401     <![CDATA[A private collection of elements that are hidden from the enclosing injector or module by
   5402  default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
   5403 
   5404  @author jessewilson (a] google.com (Jesse Wilson)
   5405  @since 2.0]]>
   5406     </doc>
   5407   </interface>
   5408   <!-- end interface com.google.inject.spi.PrivateElements -->
   5409   <!-- start interface com.google.inject.spi.ProviderBinding -->
   5410   <interface name="ProviderBinding"    abstract="true"
   5411     static="false" final="false" visibility="public"
   5412     deprecated="not deprecated">
   5413     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5414     <method name="getProvidedKey" return="com.google.inject.Key&lt;?&gt;"
   5415       abstract="false" native="false" synchronized="false"
   5416       static="false" final="false" visibility="public"
   5417       deprecated="not deprecated">
   5418       <doc>
   5419       <![CDATA[Returns the key whose binding is used to {@link Provider#get provide instances}. That binding
   5420  can be retrieved from an injector using {@link com.google.inject.Injector#getBinding(Key)
   5421  Injector.getBinding(providedKey)}]]>
   5422       </doc>
   5423     </method>
   5424     <doc>
   5425     <![CDATA[A binding to a {@link Provider} that delegates to the binding for the provided type. This binding
   5426  is used whenever a {@code Provider<T>} is injected (as opposed to injecting {@code T} directly).
   5427 
   5428  @author jessewilson (a] google.com (Jesse Wilson)
   5429  @since 2.0]]>
   5430     </doc>
   5431   </interface>
   5432   <!-- end interface com.google.inject.spi.ProviderBinding -->
   5433   <!-- start interface com.google.inject.spi.ProviderInstanceBinding -->
   5434   <interface name="ProviderInstanceBinding"    abstract="true"
   5435     static="false" final="false" visibility="public"
   5436     deprecated="not deprecated">
   5437     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5438     <implements name="com.google.inject.spi.HasDependencies"/>
   5439     <method name="getProviderInstance" return="com.google.inject.Provider&lt;? extends T&gt;"
   5440       abstract="false" native="false" synchronized="false"
   5441       static="false" final="false" visibility="public"
   5442       deprecated="not deprecated">
   5443       <doc>
   5444       <![CDATA[Returns the user-supplied, unscoped provider.]]>
   5445       </doc>
   5446     </method>
   5447     <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   5448       abstract="false" native="false" synchronized="false"
   5449       static="false" final="false" visibility="public"
   5450       deprecated="not deprecated">
   5451       <doc>
   5452       <![CDATA[Returns the field and method injection points of the provider, injected at injector-creation
   5453  time only.
   5454 
   5455  @return a possibly empty set]]>
   5456       </doc>
   5457     </method>
   5458     <doc>
   5459     <![CDATA[A binding to a provider instance. The provider's {@code get} method is invoked to resolve
   5460  injections.
   5461 
   5462  @author jessewilson (a] google.com (Jesse Wilson)
   5463  @since 2.0]]>
   5464     </doc>
   5465   </interface>
   5466   <!-- end interface com.google.inject.spi.ProviderInstanceBinding -->
   5467   <!-- start interface com.google.inject.spi.ProviderKeyBinding -->
   5468   <interface name="ProviderKeyBinding"    abstract="true"
   5469     static="false" final="false" visibility="public"
   5470     deprecated="not deprecated">
   5471     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5472     <method name="getProviderKey" return="com.google.inject.Key&lt;? extends com.google.inject.Provider&lt;? extends T&gt;&gt;"
   5473       abstract="false" native="false" synchronized="false"
   5474       static="false" final="false" visibility="public"
   5475       deprecated="not deprecated">
   5476       <doc>
   5477       <![CDATA[Returns the key used to resolve the provider's binding. That binding can be retrieved from an
   5478  injector using {@link com.google.inject.Injector#getBinding(Key)
   5479  Injector.getBinding(providerKey)}]]>
   5480       </doc>
   5481     </method>
   5482     <doc>
   5483     <![CDATA[A binding to a provider key. To resolve injections, the provider key is first resolved, then that
   5484  provider's {@code get} method is invoked.
   5485 
   5486  @author jessewilson (a] google.com (Jesse Wilson)
   5487  @since 2.0]]>
   5488     </doc>
   5489   </interface>
   5490   <!-- end interface com.google.inject.spi.ProviderKeyBinding -->
   5491   <!-- start class com.google.inject.spi.ProviderLookup -->
   5492   <class name="ProviderLookup" extends="java.lang.Object"
   5493     abstract="false"
   5494     static="false" final="true" visibility="public"
   5495     deprecated="not deprecated">
   5496     <implements name="com.google.inject.spi.Element"/>
   5497     <constructor name="ProviderLookup" type="java.lang.Object, com.google.inject.Key&lt;T&gt;"
   5498       static="false" final="false" visibility="public"
   5499       deprecated="not deprecated">
   5500     </constructor>
   5501     <method name="getSource" return="java.lang.Object"
   5502       abstract="false" native="false" synchronized="false"
   5503       static="false" final="false" visibility="public"
   5504       deprecated="not deprecated">
   5505     </method>
   5506     <method name="getKey" return="com.google.inject.Key&lt;T&gt;"
   5507       abstract="false" native="false" synchronized="false"
   5508       static="false" final="false" visibility="public"
   5509       deprecated="not deprecated">
   5510     </method>
   5511     <method name="acceptVisitor" return="T"
   5512       abstract="false" native="false" synchronized="false"
   5513       static="false" final="false" visibility="public"
   5514       deprecated="not deprecated">
   5515       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5516     </method>
   5517     <method name="initializeDelegate"
   5518       abstract="false" native="false" synchronized="false"
   5519       static="false" final="false" visibility="public"
   5520       deprecated="not deprecated">
   5521       <param name="delegate" type="com.google.inject.Provider&lt;T&gt;"/>
   5522       <doc>
   5523       <![CDATA[Sets the actual provider.
   5524 
   5525  @throws IllegalStateException if the delegate is already set]]>
   5526       </doc>
   5527     </method>
   5528     <method name="applyTo"
   5529       abstract="false" native="false" synchronized="false"
   5530       static="false" final="false" visibility="public"
   5531       deprecated="not deprecated">
   5532       <param name="binder" type="com.google.inject.Binder"/>
   5533     </method>
   5534     <method name="getDelegate" return="com.google.inject.Provider&lt;T&gt;"
   5535       abstract="false" native="false" synchronized="false"
   5536       static="false" final="false" visibility="public"
   5537       deprecated="not deprecated">
   5538       <doc>
   5539       <![CDATA[Returns the delegate provider, or {@code null} if it has not yet been initialized. The delegate
   5540  will be initialized when this element is processed, or otherwise used to create an injector.]]>
   5541       </doc>
   5542     </method>
   5543     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   5544       abstract="false" native="false" synchronized="false"
   5545       static="false" final="false" visibility="public"
   5546       deprecated="not deprecated">
   5547       <doc>
   5548       <![CDATA[Returns the looked up provider. The result is not valid until this lookup has been initialized,
   5549  which usually happens when the injector is created. The provider will throw an {@code
   5550  IllegalStateException} if you try to use it beforehand.]]>
   5551       </doc>
   5552     </method>
   5553     <doc>
   5554     <![CDATA[A lookup of the provider for a type. Lookups are created explicitly in a module using
   5555  {@link com.google.inject.Binder#getProvider(Class) getProvider()} statements:
   5556  <pre>
   5557      Provider&lt;PaymentService&gt; paymentServiceProvider
   5558          = getProvider(PaymentService.class);</pre>
   5559 
   5560  @author jessewilson (a] google.com (Jesse Wilson)
   5561  @since 2.0]]>
   5562     </doc>
   5563   </class>
   5564   <!-- end class com.google.inject.spi.ProviderLookup -->
   5565   <!-- start interface com.google.inject.spi.ProviderWithDependencies -->
   5566   <interface name="ProviderWithDependencies"    abstract="true"
   5567     static="false" final="false" visibility="public"
   5568     deprecated="not deprecated">
   5569     <implements name="com.google.inject.Provider&lt;T&gt;"/>
   5570     <implements name="com.google.inject.spi.HasDependencies"/>
   5571     <doc>
   5572     <![CDATA[A provider with dependencies on other injected types. If a {@link Provider} has dependencies that
   5573  aren't specified in injections, this interface should be used to expose all dependencies.
   5574 
   5575  @since 2.0]]>
   5576     </doc>
   5577   </interface>
   5578   <!-- end interface com.google.inject.spi.ProviderWithDependencies -->
   5579   <!-- start class com.google.inject.spi.ScopeBinding -->
   5580   <class name="ScopeBinding" extends="java.lang.Object"
   5581     abstract="false"
   5582     static="false" final="true" visibility="public"
   5583     deprecated="not deprecated">
   5584     <implements name="com.google.inject.spi.Element"/>
   5585     <method name="getSource" return="java.lang.Object"
   5586       abstract="false" native="false" synchronized="false"
   5587       static="false" final="false" visibility="public"
   5588       deprecated="not deprecated">
   5589     </method>
   5590     <method name="getAnnotationType" return="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"
   5591       abstract="false" native="false" synchronized="false"
   5592       static="false" final="false" visibility="public"
   5593       deprecated="not deprecated">
   5594     </method>
   5595     <method name="getScope" return="com.google.inject.Scope"
   5596       abstract="false" native="false" synchronized="false"
   5597       static="false" final="false" visibility="public"
   5598       deprecated="not deprecated">
   5599     </method>
   5600     <method name="acceptVisitor" return="T"
   5601       abstract="false" native="false" synchronized="false"
   5602       static="false" final="false" visibility="public"
   5603       deprecated="not deprecated">
   5604       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5605     </method>
   5606     <method name="applyTo"
   5607       abstract="false" native="false" synchronized="false"
   5608       static="false" final="false" visibility="public"
   5609       deprecated="not deprecated">
   5610       <param name="binder" type="com.google.inject.Binder"/>
   5611     </method>
   5612     <doc>
   5613     <![CDATA[Registration of a scope annotation with the scope that implements it. Instances are created
   5614  explicitly in a module using {@link com.google.inject.Binder#bindScope(Class, Scope) bindScope()}
   5615  statements:
   5616  <pre>
   5617      Scope recordScope = new RecordScope();
   5618      bindScope(RecordScoped.class, new RecordScope());</pre>
   5619 
   5620  @author jessewilson (a] google.com (Jesse Wilson)
   5621  @since 2.0]]>
   5622     </doc>
   5623   </class>
   5624   <!-- end class com.google.inject.spi.ScopeBinding -->
   5625   <!-- start class com.google.inject.spi.StaticInjectionRequest -->
   5626   <class name="StaticInjectionRequest" extends="java.lang.Object"
   5627     abstract="false"
   5628     static="false" final="true" visibility="public"
   5629     deprecated="not deprecated">
   5630     <implements name="com.google.inject.spi.Element"/>
   5631     <method name="getSource" return="java.lang.Object"
   5632       abstract="false" native="false" synchronized="false"
   5633       static="false" final="false" visibility="public"
   5634       deprecated="not deprecated">
   5635     </method>
   5636     <method name="getType" return="java.lang.Class&lt;?&gt;"
   5637       abstract="false" native="false" synchronized="false"
   5638       static="false" final="false" visibility="public"
   5639       deprecated="not deprecated">
   5640     </method>
   5641     <method name="getInjectionPoints" return="java.util.Set&lt;com.google.inject.spi.InjectionPoint&gt;"
   5642       abstract="false" native="false" synchronized="false"
   5643       static="false" final="false" visibility="public"
   5644       deprecated="not deprecated">
   5645       <exception name="ConfigurationException" type="com.google.inject.ConfigurationException"/>
   5646       <doc>
   5647       <![CDATA[Returns the static methods and fields of {@code type} that will be injected to fulfill this
   5648  request.
   5649 
   5650  @return a possibly empty set of injection points. The set has a specified iteration order. All
   5651       fields are returned and then all methods. Within the fields, supertype fields are returned
   5652       before subtype fields. Similarly, supertype methods are returned before subtype methods.
   5653  @throws ConfigurationException if there is a malformed injection point on {@code type}, such as
   5654       a field with multiple binding annotations. The exception's {@link
   5655       ConfigurationException#getPartialValue() partial value} is a {@code Set<InjectionPoint>}
   5656       of the valid injection points.]]>
   5657       </doc>
   5658     </method>
   5659     <method name="applyTo"
   5660       abstract="false" native="false" synchronized="false"
   5661       static="false" final="false" visibility="public"
   5662       deprecated="not deprecated">
   5663       <param name="binder" type="com.google.inject.Binder"/>
   5664     </method>
   5665     <method name="acceptVisitor" return="T"
   5666       abstract="false" native="false" synchronized="false"
   5667       static="false" final="false" visibility="public"
   5668       deprecated="not deprecated">
   5669       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5670     </method>
   5671     <doc>
   5672     <![CDATA[A request to inject the static fields and methods of a type. Requests are created
   5673  explicitly in a module using {@link com.google.inject.Binder#requestStaticInjection(Class[])
   5674  requestStaticInjection()} statements:
   5675  <pre>
   5676      requestStaticInjection(MyLegacyService.class);</pre>
   5677 
   5678  @author jessewilson (a] google.com (Jesse Wilson)
   5679  @since 2.0]]>
   5680     </doc>
   5681   </class>
   5682   <!-- end class com.google.inject.spi.StaticInjectionRequest -->
   5683   <!-- start interface com.google.inject.spi.TypeConverter -->
   5684   <interface name="TypeConverter"    abstract="true"
   5685     static="false" final="false" visibility="public"
   5686     deprecated="not deprecated">
   5687     <method name="convert" return="java.lang.Object"
   5688       abstract="false" native="false" synchronized="false"
   5689       static="false" final="false" visibility="public"
   5690       deprecated="not deprecated">
   5691       <param name="value" type="java.lang.String"/>
   5692       <param name="toType" type="com.google.inject.TypeLiteral&lt;?&gt;"/>
   5693       <doc>
   5694       <![CDATA[Converts a string value. Throws an exception if a conversion error occurs.]]>
   5695       </doc>
   5696     </method>
   5697     <doc>
   5698     <![CDATA[Converts constant string values to a different type.
   5699 
   5700  @author crazybob (a] google.com (Bob Lee)
   5701  @since 2.0]]>
   5702     </doc>
   5703   </interface>
   5704   <!-- end interface com.google.inject.spi.TypeConverter -->
   5705   <!-- start class com.google.inject.spi.TypeConverterBinding -->
   5706   <class name="TypeConverterBinding" extends="java.lang.Object"
   5707     abstract="false"
   5708     static="false" final="true" visibility="public"
   5709     deprecated="not deprecated">
   5710     <implements name="com.google.inject.spi.Element"/>
   5711     <method name="getSource" return="java.lang.Object"
   5712       abstract="false" native="false" synchronized="false"
   5713       static="false" final="false" visibility="public"
   5714       deprecated="not deprecated">
   5715     </method>
   5716     <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
   5717       abstract="false" native="false" synchronized="false"
   5718       static="false" final="false" visibility="public"
   5719       deprecated="not deprecated">
   5720     </method>
   5721     <method name="getTypeConverter" return="com.google.inject.spi.TypeConverter"
   5722       abstract="false" native="false" synchronized="false"
   5723       static="false" final="false" visibility="public"
   5724       deprecated="not deprecated">
   5725     </method>
   5726     <method name="acceptVisitor" return="T"
   5727       abstract="false" native="false" synchronized="false"
   5728       static="false" final="false" visibility="public"
   5729       deprecated="not deprecated">
   5730       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5731     </method>
   5732     <method name="applyTo"
   5733       abstract="false" native="false" synchronized="false"
   5734       static="false" final="false" visibility="public"
   5735       deprecated="not deprecated">
   5736       <param name="binder" type="com.google.inject.Binder"/>
   5737     </method>
   5738     <doc>
   5739     <![CDATA[Registration of type converters for matching target types. Instances are created
   5740  explicitly in a module using {@link com.google.inject.Binder#convertToTypes(Matcher,
   5741  TypeConverter) convertToTypes()} statements:
   5742  <pre>
   5743      convertToTypes(Matchers.only(DateTime.class), new DateTimeConverter());</pre>
   5744 
   5745  @author jessewilson (a] google.com (Jesse Wilson)
   5746  @since 2.0]]>
   5747     </doc>
   5748   </class>
   5749   <!-- end class com.google.inject.spi.TypeConverterBinding -->
   5750   <!-- start interface com.google.inject.spi.TypeEncounter -->
   5751   <interface name="TypeEncounter"    abstract="true"
   5752     static="false" final="false" visibility="public"
   5753     deprecated="not deprecated">
   5754     <method name="addError"
   5755       abstract="false" native="false" synchronized="false"
   5756       static="false" final="false" visibility="public"
   5757       deprecated="not deprecated">
   5758       <param name="message" type="java.lang.String"/>
   5759       <param name="arguments" type="java.lang.Object[]"/>
   5760       <doc>
   5761       <![CDATA[Records an error message for type {@code I} which will be presented to the user at a later
   5762  time. Unlike throwing an exception, this enable us to continue configuring the Injector and
   5763  discover more errors. Uses {@link String#format(String, Object[])} to insert the arguments
   5764  into the message.]]>
   5765       </doc>
   5766     </method>
   5767     <method name="addError"
   5768       abstract="false" native="false" synchronized="false"
   5769       static="false" final="false" visibility="public"
   5770       deprecated="not deprecated">
   5771       <param name="t" type="java.lang.Throwable"/>
   5772       <doc>
   5773       <![CDATA[Records an exception for type {@code I}, the full details of which will be logged, and the
   5774  message of which will be presented to the user at a later time. If your type listener calls
   5775  something that you worry may fail, you should catch the exception and pass it to this method.]]>
   5776       </doc>
   5777     </method>
   5778     <method name="addError"
   5779       abstract="false" native="false" synchronized="false"
   5780       static="false" final="false" visibility="public"
   5781       deprecated="not deprecated">
   5782       <param name="message" type="com.google.inject.spi.Message"/>
   5783       <doc>
   5784       <![CDATA[Records an error message to be presented to the user at a later time.]]>
   5785       </doc>
   5786     </method>
   5787     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   5788       abstract="false" native="false" synchronized="false"
   5789       static="false" final="false" visibility="public"
   5790       deprecated="not deprecated">
   5791       <param name="key" type="com.google.inject.Key&lt;T&gt;"/>
   5792       <doc>
   5793       <![CDATA[Returns the provider used to obtain instances for the given injection key. The returned
   5794  provider will not be valid until the injector has been created. The provider will throw an
   5795  {@code IllegalStateException} if you try to use it beforehand.]]>
   5796       </doc>
   5797     </method>
   5798     <method name="getProvider" return="com.google.inject.Provider&lt;T&gt;"
   5799       abstract="false" native="false" synchronized="false"
   5800       static="false" final="false" visibility="public"
   5801       deprecated="not deprecated">
   5802       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   5803       <doc>
   5804       <![CDATA[Returns the provider used to obtain instances for the given injection type. The returned
   5805  provider will not be valid until the injetor has been created. The provider will throw an
   5806  {@code IllegalStateException} if you try to use it beforehand.]]>
   5807       </doc>
   5808     </method>
   5809     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   5810       abstract="false" native="false" synchronized="false"
   5811       static="false" final="false" visibility="public"
   5812       deprecated="not deprecated">
   5813       <param name="typeLiteral" type="com.google.inject.TypeLiteral&lt;T&gt;"/>
   5814       <doc>
   5815       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
   5816  of the given type {@code T}. The returned members injector will not be valid until the main
   5817  injector has been created. The members injector will throw an {@code IllegalStateException}
   5818  if you try to use it beforehand.
   5819 
   5820  @param typeLiteral type to get members injector for]]>
   5821       </doc>
   5822     </method>
   5823     <method name="getMembersInjector" return="com.google.inject.MembersInjector&lt;T&gt;"
   5824       abstract="false" native="false" synchronized="false"
   5825       static="false" final="false" visibility="public"
   5826       deprecated="not deprecated">
   5827       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   5828       <doc>
   5829       <![CDATA[Returns the members injector used to inject dependencies into methods and fields on instances
   5830  of the given type {@code T}. The returned members injector will not be valid until the main
   5831  injector has been created. The members injector will throw an {@code IllegalStateException}
   5832  if you try to use it beforehand.
   5833 
   5834  @param type type to get members injector for]]>
   5835       </doc>
   5836     </method>
   5837     <method name="register"
   5838       abstract="false" native="false" synchronized="false"
   5839       static="false" final="false" visibility="public"
   5840       deprecated="not deprecated">
   5841       <param name="membersInjector" type="com.google.inject.MembersInjector&lt;? super I&gt;"/>
   5842       <doc>
   5843       <![CDATA[Registers a members injector for type {@code I}. Guice will use the members injector after its
   5844  performed its own injections on an instance of {@code I}.]]>
   5845       </doc>
   5846     </method>
   5847     <method name="register"
   5848       abstract="false" native="false" synchronized="false"
   5849       static="false" final="false" visibility="public"
   5850       deprecated="not deprecated">
   5851       <param name="listener" type="com.google.inject.spi.InjectionListener&lt;? super I&gt;"/>
   5852       <doc>
   5853       <![CDATA[Registers an injection listener for type {@code I}. Guice will notify the listener after all
   5854  injections have been performed on an instance of {@code I}.]]>
   5855       </doc>
   5856     </method>
   5857     <method name="bindInterceptor"
   5858       abstract="false" native="false" synchronized="false"
   5859       static="false" final="false" visibility="public"
   5860       deprecated="not deprecated">
   5861       <param name="methodMatcher" type="com.google.inject.matcher.Matcher&lt;? super java.lang.reflect.Method&gt;"/>
   5862       <param name="interceptors" type="org.aopalliance.intercept.MethodInterceptor[]"/>
   5863       <doc>
   5864       <![CDATA[Binds method interceptor[s] to methods matched in type {@code I} and its supertypes. A
   5865  method is eligible for interception if:
   5866 
   5867  <ul>
   5868   <li>Guice created the instance the method is on</li>
   5869   <li>Neither the enclosing type nor the method is final</li>
   5870   <li>And the method is package-private or more accessible</li>
   5871  </ul>
   5872 
   5873  @param methodMatcher matches methods the interceptor should apply to. For
   5874      example: {@code annotatedWith(Transactional.class)}.
   5875  @param interceptors to bind]]>
   5876       </doc>
   5877     </method>
   5878     <doc>
   5879     <![CDATA[Context of an injectable type encounter. Enables reporting errors, registering injection
   5880  listeners and binding method interceptors for injectable type {@code I}. It is an error to use
   5881  an encounter after the {@link TypeListener#hear(TypeLiteral, TypeEncounter) hear()} method has
   5882  returned.
   5883 
   5884  @param <I> the injectable type encountered
   5885  @since 2.0]]>
   5886     </doc>
   5887   </interface>
   5888   <!-- end interface com.google.inject.spi.TypeEncounter -->
   5889   <!-- start interface com.google.inject.spi.TypeListener -->
   5890   <interface name="TypeListener"    abstract="true"
   5891     static="false" final="false" visibility="public"
   5892     deprecated="not deprecated">
   5893     <method name="hear"
   5894       abstract="false" native="false" synchronized="false"
   5895       static="false" final="false" visibility="public"
   5896       deprecated="not deprecated">
   5897       <param name="type" type="com.google.inject.TypeLiteral&lt;I&gt;"/>
   5898       <param name="encounter" type="com.google.inject.spi.TypeEncounter&lt;I&gt;"/>
   5899       <doc>
   5900       <![CDATA[Invoked when Guice encounters a new type eligible for constructor or members injection.
   5901  Called during injector creation (or afterwords if Guice encounters a type at run time and
   5902  creates a JIT binding).
   5903 
   5904  @param type encountered by Guice
   5905  @param encounter context of this encounter, enables reporting errors, registering injection
   5906      listeners and binding method interceptors for {@code type}.
   5907 
   5908  @param <I> the injectable type]]>
   5909       </doc>
   5910     </method>
   5911     <doc>
   5912     <![CDATA[Listens for Guice to encounter injectable types. If a given type has its constructor injected in
   5913  one situation but only its methods and fields injected in another, Guice will notify this
   5914  listener once.
   5915 
   5916  <p>Useful for extra type checking, {@linkplain TypeEncounter#register(InjectionListener)
   5917  registering injection listeners}, and {@linkplain TypeEncounter#bindInterceptor(
   5918  com.google.inject.matcher.Matcher, org.aopalliance.intercept.MethodInterceptor[])
   5919  binding method interceptors}.
   5920  
   5921  @since 2.0]]>
   5922     </doc>
   5923   </interface>
   5924   <!-- end interface com.google.inject.spi.TypeListener -->
   5925   <!-- start class com.google.inject.spi.TypeListenerBinding -->
   5926   <class name="TypeListenerBinding" extends="java.lang.Object"
   5927     abstract="false"
   5928     static="false" final="true" visibility="public"
   5929     deprecated="not deprecated">
   5930     <implements name="com.google.inject.spi.Element"/>
   5931     <method name="getListener" return="com.google.inject.spi.TypeListener"
   5932       abstract="false" native="false" synchronized="false"
   5933       static="false" final="false" visibility="public"
   5934       deprecated="not deprecated">
   5935       <doc>
   5936       <![CDATA[Returns the registered listener.]]>
   5937       </doc>
   5938     </method>
   5939     <method name="getTypeMatcher" return="com.google.inject.matcher.Matcher&lt;? super com.google.inject.TypeLiteral&lt;?&gt;&gt;"
   5940       abstract="false" native="false" synchronized="false"
   5941       static="false" final="false" visibility="public"
   5942       deprecated="not deprecated">
   5943       <doc>
   5944       <![CDATA[Returns the type matcher which chooses which types the listener should be notified of.]]>
   5945       </doc>
   5946     </method>
   5947     <method name="getSource" return="java.lang.Object"
   5948       abstract="false" native="false" synchronized="false"
   5949       static="false" final="false" visibility="public"
   5950       deprecated="not deprecated">
   5951     </method>
   5952     <method name="acceptVisitor" return="T"
   5953       abstract="false" native="false" synchronized="false"
   5954       static="false" final="false" visibility="public"
   5955       deprecated="not deprecated">
   5956       <param name="visitor" type="com.google.inject.spi.ElementVisitor&lt;T&gt;"/>
   5957     </method>
   5958     <method name="applyTo"
   5959       abstract="false" native="false" synchronized="false"
   5960       static="false" final="false" visibility="public"
   5961       deprecated="not deprecated">
   5962       <param name="binder" type="com.google.inject.Binder"/>
   5963     </method>
   5964     <doc>
   5965     <![CDATA[Binds types (picked using a Matcher) to an type listener. Registrations are created explicitly in
   5966  a module using {@link com.google.inject.Binder#bindListener(Matcher, TypeListener)} statements:
   5967 
   5968  <pre>
   5969      register(only(new TypeLiteral&lt;PaymentService&lt;CreditCard>>() {}), listener);</pre>
   5970 
   5971  @author jessewilson (a] google.com (Jesse Wilson)
   5972  @since 2.0]]>
   5973     </doc>
   5974   </class>
   5975   <!-- end class com.google.inject.spi.TypeListenerBinding -->
   5976   <!-- start interface com.google.inject.spi.UntargettedBinding -->
   5977   <interface name="UntargettedBinding"    abstract="true"
   5978     static="false" final="false" visibility="public"
   5979     deprecated="not deprecated">
   5980     <implements name="com.google.inject.Binding&lt;T&gt;"/>
   5981     <doc>
   5982     <![CDATA[An untargetted binding. This binding indicates that the injector should use its implicit binding
   5983  strategies to resolve injections.
   5984 
   5985  @author jessewilson (a] google.com (Jesse Wilson)
   5986  @since 2.0]]>
   5987     </doc>
   5988   </interface>
   5989   <!-- end interface com.google.inject.spi.UntargettedBinding -->
   5990 </package>
   5991 <package name="com.google.inject.spring">
   5992   <!-- start class com.google.inject.spring.SpringIntegration -->
   5993   <class name="SpringIntegration" extends="java.lang.Object"
   5994     abstract="false"
   5995     static="false" final="false" visibility="public"
   5996     deprecated="not deprecated">
   5997     <method name="fromSpring" return="com.google.inject.Provider&lt;T&gt;"
   5998       abstract="false" native="false" synchronized="false"
   5999       static="true" final="false" visibility="public"
   6000       deprecated="not deprecated">
   6001       <param name="type" type="java.lang.Class&lt;T&gt;"/>
   6002       <param name="name" type="java.lang.String"/>
   6003       <doc>
   6004       <![CDATA[Creates a provider which looks up objects from Spring using the given name.
   6005  Expects a binding to {@link
   6006  org.springframework.beans.factory.BeanFactory}. Example usage:
   6007 
   6008  <pre>
   6009  bind(DataSource.class)
   6010    .toProvider(fromSpring(DataSource.class, "dataSource"));
   6011  </pre>]]>
   6012       </doc>
   6013     </method>
   6014     <method name="bindAll"
   6015       abstract="false" native="false" synchronized="false"
   6016       static="true" final="false" visibility="public"
   6017       deprecated="not deprecated">
   6018       <param name="binder" type="com.google.inject.Binder"/>
   6019       <param name="beanFactory" type="ListableBeanFactory"/>
   6020       <doc>
   6021       <![CDATA[Binds all Spring beans from the given factory by name. For a Spring bean
   6022  named "foo", this method creates a binding to the bean's type and
   6023  {@code @Named("foo")}.
   6024 
   6025  @see com.google.inject.name.Named
   6026  @see com.google.inject.name.Names#named(String)]]>
   6027       </doc>
   6028     </method>
   6029     <doc>
   6030     <![CDATA[Integrates Guice with Spring.
   6031 
   6032  @author crazybob (a] google.com (Bob Lee)]]>
   6033     </doc>
   6034   </class>
   6035   <!-- end class com.google.inject.spring.SpringIntegration -->
   6036 </package>
   6037 <package name="com.google.inject.struts2">
   6038   <!-- start class com.google.inject.struts2.GuiceObjectFactory -->
   6039   <class name="GuiceObjectFactory" extends="ObjectFactory"
   6040     abstract="false"
   6041     static="false" final="false" visibility="public"
   6042     deprecated="not deprecated">
   6043     <constructor name="GuiceObjectFactory"
   6044       static="false" final="false" visibility="public"
   6045       deprecated="not deprecated">
   6046     </constructor>
   6047     <method name="isNoArgConstructorRequired" return="boolean"
   6048       abstract="false" native="false" synchronized="false"
   6049       static="false" final="false" visibility="public"
   6050       deprecated="not deprecated">
   6051     </method>
   6052     <method name="getClassInstance" return="java.lang.Class"
   6053       abstract="false" native="false" synchronized="false"
   6054       static="false" final="false" visibility="public"
   6055       deprecated="not deprecated">
   6056       <param name="name" type="java.lang.String"/>
   6057       <exception name="ClassNotFoundException" type="java.lang.ClassNotFoundException"/>
   6058     </method>
   6059     <method name="buildBean" return="java.lang.Object"
   6060       abstract="false" native="false" synchronized="false"
   6061       static="false" final="false" visibility="public"
   6062       deprecated="not deprecated">
   6063       <param name="clazz" type="java.lang.Class"/>
   6064       <param name="extraContext" type="java.util.Map"/>
   6065     </method>
   6066     <method name="buildInterceptor" return="Interceptor"
   6067       abstract="false" native="false" synchronized="false"
   6068       static="false" final="false" visibility="public"
   6069       deprecated="not deprecated">
   6070       <param name="interceptorConfig" type="InterceptorConfig"/>
   6071       <param name="interceptorRefParams" type="java.util.Map"/>
   6072       <exception name="ConfigurationException" type="ConfigurationException"/>
   6073     </method>
   6074   </class>
   6075   <!-- end class com.google.inject.struts2.GuiceObjectFactory -->
   6076 </package>
   6077 <package name="com.google.inject.throwingproviders">
   6078   <!-- start interface com.google.inject.throwingproviders.ThrowingProvider -->
   6079   <interface name="ThrowingProvider"    abstract="true"
   6080     static="false" final="false" visibility="public"
   6081     deprecated="not deprecated">
   6082     <method name="get" return="T"
   6083       abstract="false" native="false" synchronized="false"
   6084       static="false" final="false" visibility="public"
   6085       deprecated="not deprecated">
   6086       <exception name="Exception" type="java.lang.Exception"/>
   6087     </method>
   6088     <doc>
   6089     <![CDATA[Alternative to the Guice {@link com.google.inject.Provider} that throws
   6090  a checked Exception. Users may not inject {@code T} directly.
   6091 
   6092  <p>This interface must be extended to use application-specific exception types.
   6093  Such subinterfaces may not define new methods:
   6094  <pre>
   6095  public interface RemoteProvider&lt;T&gt; extends ThrowingProvider&lt;T, RemoteException&gt; { }
   6096  </pre>
   6097 
   6098  <p>When this type is bound using {@link ThrowingProviderBinder}, the value returned
   6099  or exception thrown by {@link #get} will be scoped. As a consequence, {@link #get}
   6100  will invoked at most once within each scope.
   6101 
   6102  @author jmourits (a] google.com (Jerome Mourits)
   6103  @author jessewilson (a] google.com (Jesse Wilson)]]>
   6104     </doc>
   6105   </interface>
   6106   <!-- end interface com.google.inject.throwingproviders.ThrowingProvider -->
   6107   <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder -->
   6108   <class name="ThrowingProviderBinder" extends="java.lang.Object"
   6109     abstract="false"
   6110     static="false" final="false" visibility="public"
   6111     deprecated="not deprecated">
   6112     <method name="create" return="com.google.inject.throwingproviders.ThrowingProviderBinder"
   6113       abstract="false" native="false" synchronized="false"
   6114       static="true" final="false" visibility="public"
   6115       deprecated="not deprecated">
   6116       <param name="binder" type="com.google.inject.Binder"/>
   6117     </method>
   6118     <method name="bind" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
   6119       abstract="false" native="false" synchronized="false"
   6120       static="false" final="false" visibility="public"
   6121       deprecated="not deprecated">
   6122       <param name="interfaceType" type="java.lang.Class&lt;P&gt;"/>
   6123       <param name="valueType" type="java.lang.reflect.Type"/>
   6124     </method>
   6125     <doc>
   6126     <![CDATA[<p>Builds a binding for a {@link ThrowingProvider} using a fluent API:
   6127  <pre><code>ThrowingProviderBinder.create(binder())
   6128     .bind(RemoteProvider.class, Customer.class)
   6129     .to(RemoteCustomerProvider.class)
   6130     .in(RequestScope.class);
   6131  </code></pre>
   6132  
   6133  @author jmourits (a] google.com (Jerome Mourits)
   6134  @author jessewilson (a] google.com (Jesse Wilson)]]>
   6135     </doc>
   6136   </class>
   6137   <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder -->
   6138   <!-- start class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
   6139   <class name="ThrowingProviderBinder.SecondaryBinder" extends="java.lang.Object"
   6140     abstract="false"
   6141     static="false" final="false" visibility="public"
   6142     deprecated="not deprecated">
   6143     <constructor name="ThrowingProviderBinder.SecondaryBinder" type="java.lang.Class&lt;P&gt;, java.lang.reflect.Type"
   6144       static="false" final="false" visibility="public"
   6145       deprecated="not deprecated">
   6146     </constructor>
   6147     <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
   6148       abstract="false" native="false" synchronized="false"
   6149       static="false" final="false" visibility="public"
   6150       deprecated="not deprecated">
   6151       <param name="annotationType" type="java.lang.Class&lt;? extends java.lang.annotation.Annotation&gt;"/>
   6152     </method>
   6153     <method name="annotatedWith" return="com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder&lt;P&gt;"
   6154       abstract="false" native="false" synchronized="false"
   6155       static="false" final="false" visibility="public"
   6156       deprecated="not deprecated">
   6157       <param name="annotation" type="java.lang.annotation.Annotation"/>
   6158     </method>
   6159     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   6160       abstract="false" native="false" synchronized="false"
   6161       static="false" final="false" visibility="public"
   6162       deprecated="not deprecated">
   6163       <param name="target" type="P extends com.google.inject.throwingproviders.ThrowingProvider"/>
   6164     </method>
   6165     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   6166       abstract="false" native="false" synchronized="false"
   6167       static="false" final="false" visibility="public"
   6168       deprecated="not deprecated">
   6169       <param name="targetType" type="java.lang.Class&lt;? extends P&gt;"/>
   6170     </method>
   6171     <method name="to" return="com.google.inject.binder.ScopedBindingBuilder"
   6172       abstract="false" native="false" synchronized="false"
   6173       static="false" final="false" visibility="public"
   6174       deprecated="not deprecated">
   6175       <param name="targetKey" type="com.google.inject.Key&lt;? extends P&gt;"/>
   6176     </method>
   6177   </class>
   6178   <!-- end class com.google.inject.throwingproviders.ThrowingProviderBinder.SecondaryBinder -->
   6179 </package>
   6180 <package name="com.google.inject.tools.jmx">
   6181   <!-- start interface com.google.inject.tools.jmx.ManagedBindingMBean -->
   6182   <interface name="ManagedBindingMBean"    abstract="true"
   6183     static="false" final="false" visibility="public"
   6184     deprecated="not deprecated">
   6185     <method name="getSource" return="java.lang.String"
   6186       abstract="false" native="false" synchronized="false"
   6187       static="false" final="false" visibility="public"
   6188       deprecated="not deprecated">
   6189       <doc>
   6190       <![CDATA[Gets the source of this binding.]]>
   6191       </doc>
   6192     </method>
   6193     <method name="getProvider" return="java.lang.String"
   6194       abstract="false" native="false" synchronized="false"
   6195       static="false" final="false" visibility="public"
   6196       deprecated="not deprecated">
   6197       <doc>
   6198       <![CDATA[Gets the provider to which this binding is bound.]]>
   6199       </doc>
   6200     </method>
   6201     <method name="getKey" return="java.lang.String"
   6202       abstract="false" native="false" synchronized="false"
   6203       static="false" final="false" visibility="public"
   6204       deprecated="not deprecated">
   6205       <doc>
   6206       <![CDATA[Gets the binding key.]]>
   6207       </doc>
   6208     </method>
   6209     <doc>
   6210     <![CDATA[JMX interface to bindings.
   6211 
   6212  @author crazybob (a] google.com (Bob Lee)]]>
   6213     </doc>
   6214   </interface>
   6215   <!-- end interface com.google.inject.tools.jmx.ManagedBindingMBean -->
   6216   <!-- start class com.google.inject.tools.jmx.Manager -->
   6217   <class name="Manager" extends="java.lang.Object"
   6218     abstract="false"
   6219     static="false" final="false" visibility="public"
   6220     deprecated="not deprecated">
   6221     <constructor name="Manager"
   6222       static="false" final="false" visibility="public"
   6223       deprecated="not deprecated">
   6224     </constructor>
   6225     <method name="manage"
   6226       abstract="false" native="false" synchronized="false"
   6227       static="true" final="false" visibility="public"
   6228       deprecated="not deprecated">
   6229       <param name="domain" type="java.lang.String"/>
   6230       <param name="injector" type="com.google.inject.Injector"/>
   6231       <doc>
   6232       <![CDATA[Registers all the bindings of an Injector with the platform MBean server.
   6233  Consider using the name of your root {@link Module} class as the domain.]]>
   6234       </doc>
   6235     </method>
   6236     <method name="manage"
   6237       abstract="false" native="false" synchronized="false"
   6238       static="true" final="false" visibility="public"
   6239       deprecated="not deprecated">
   6240       <param name="server" type="javax.management.MBeanServer"/>
   6241       <param name="domain" type="java.lang.String"/>
   6242       <param name="injector" type="com.google.inject.Injector"/>
   6243       <doc>
   6244       <![CDATA[Registers all the bindings of an Injector with the given MBean server.
   6245  Consider using the name of your root {@link Module} class as the domain.]]>
   6246       </doc>
   6247     </method>
   6248     <method name="main"
   6249       abstract="false" native="false" synchronized="false"
   6250       static="true" final="false" visibility="public"
   6251       deprecated="not deprecated">
   6252       <param name="args" type="java.lang.String[]"/>
   6253       <exception name="Exception" type="java.lang.Exception"/>
   6254       <doc>
   6255       <![CDATA[Run with no arguments for usage instructions.]]>
   6256       </doc>
   6257     </method>
   6258     <doc>
   6259     <![CDATA[Provides a JMX interface to Guice.
   6260 
   6261  @author crazybob (a] google.com (Bob Lee)]]>
   6262     </doc>
   6263   </class>
   6264   <!-- end class com.google.inject.tools.jmx.Manager -->
   6265 </package>
   6266 <package name="com.google.inject.util">
   6267   <!-- start class com.google.inject.util.Modules -->
   6268   <class name="Modules" extends="java.lang.Object"
   6269     abstract="false"
   6270     static="false" final="true" visibility="public"
   6271     deprecated="not deprecated">
   6272     <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
   6273       abstract="false" native="false" synchronized="false"
   6274       static="true" final="false" visibility="public"
   6275       deprecated="not deprecated">
   6276       <param name="modules" type="com.google.inject.Module[]"/>
   6277       <doc>
   6278       <![CDATA[Returns a builder that creates a module that overlays override modules over the given
   6279  modules. If a key is bound in both sets of modules, only the binding from the override modules
   6280  is kept. This can be used to replace the bindings of a production module with test bindings:
   6281  <pre>
   6282  Module functionalTestModule
   6283      = Modules.override(new ProductionModule()).with(new TestModule());
   6284  </pre>
   6285 
   6286  <p>Prefer to write smaller modules that can be reused and tested without overrides.
   6287 
   6288  @param modules the modules whose bindings are open to be overridden]]>
   6289       </doc>
   6290     </method>
   6291     <method name="override" return="com.google.inject.util.Modules.OverriddenModuleBuilder"
   6292       abstract="false" native="false" synchronized="false"
   6293       static="true" final="false" visibility="public"
   6294       deprecated="not deprecated">
   6295       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   6296       <doc>
   6297       <![CDATA[Returns a builder that creates a module that overlays override modules over the given
   6298  modules. If a key is bound in both sets of modules, only the binding from the override modules
   6299  is kept. This can be used to replace the bindings of a production module with test bindings:
   6300  <pre>
   6301  Module functionalTestModule
   6302      = Modules.override(getProductionModules()).with(getTestModules());
   6303  </pre>
   6304 
   6305  <p>Prefer to write smaller modules that can be reused and tested without overrides.
   6306 
   6307  @param modules the modules whose bindings are open to be overridden]]>
   6308       </doc>
   6309     </method>
   6310     <method name="combine" return="com.google.inject.Module"
   6311       abstract="false" native="false" synchronized="false"
   6312       static="true" final="false" visibility="public"
   6313       deprecated="not deprecated">
   6314       <param name="modules" type="com.google.inject.Module[]"/>
   6315       <doc>
   6316       <![CDATA[Returns a new module that installs all of {@code modules}.]]>
   6317       </doc>
   6318     </method>
   6319     <method name="combine" return="com.google.inject.Module"
   6320       abstract="false" native="false" synchronized="false"
   6321       static="true" final="false" visibility="public"
   6322       deprecated="not deprecated">
   6323       <param name="modules" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   6324       <doc>
   6325       <![CDATA[Returns a new module that installs all of {@code modules}.]]>
   6326       </doc>
   6327     </method>
   6328     <field name="EMPTY_MODULE" type="com.google.inject.Module"
   6329       transient="false" volatile="false"
   6330       static="true" final="true" visibility="public"
   6331       deprecated="not deprecated">
   6332     </field>
   6333     <doc>
   6334     <![CDATA[Static utility methods for creating and working with instances of {@link Module}.
   6335 
   6336  @author jessewilson (a] google.com (Jesse Wilson)
   6337  @since 2.0]]>
   6338     </doc>
   6339   </class>
   6340   <!-- end class com.google.inject.util.Modules -->
   6341   <!-- start interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
   6342   <interface name="Modules.OverriddenModuleBuilder"    abstract="true"
   6343     static="true" final="false" visibility="public"
   6344     deprecated="not deprecated">
   6345     <method name="with" return="com.google.inject.Module"
   6346       abstract="false" native="false" synchronized="false"
   6347       static="false" final="false" visibility="public"
   6348       deprecated="not deprecated">
   6349       <param name="overrides" type="com.google.inject.Module[]"/>
   6350       <doc>
   6351       <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
   6352       </doc>
   6353     </method>
   6354     <method name="with" return="com.google.inject.Module"
   6355       abstract="false" native="false" synchronized="false"
   6356       static="false" final="false" visibility="public"
   6357       deprecated="not deprecated">
   6358       <param name="overrides" type="java.lang.Iterable&lt;? extends com.google.inject.Module&gt;"/>
   6359       <doc>
   6360       <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
   6361       </doc>
   6362     </method>
   6363     <doc>
   6364     <![CDATA[See the EDSL example at {@link Modules#override(Module[]) override()}.]]>
   6365     </doc>
   6366   </interface>
   6367   <!-- end interface com.google.inject.util.Modules.OverriddenModuleBuilder -->
   6368   <!-- start class com.google.inject.util.Providers -->
   6369   <class name="Providers" extends="java.lang.Object"
   6370     abstract="false"
   6371     static="false" final="true" visibility="public"
   6372     deprecated="not deprecated">
   6373     <method name="of" return="com.google.inject.Provider&lt;T&gt;"
   6374       abstract="false" native="false" synchronized="false"
   6375       static="true" final="false" visibility="public"
   6376       deprecated="not deprecated">
   6377       <param name="instance" type="T"/>
   6378       <doc>
   6379       <![CDATA[Returns a provider which always provides {@code instance}.  This should not
   6380  be necessary to use in your application, but is helpful for several types
   6381  of unit tests.
   6382 
   6383  @param instance the instance that should always be provided.  This is also
   6384      permitted to be null, to enable aggressive testing, although in real
   6385      life a Guice-supplied Provider will never return null.]]>
   6386       </doc>
   6387     </method>
   6388     <doc>
   6389     <![CDATA[Static utility methods for creating and working with instances of
   6390  {@link Provider}.
   6391 
   6392  @author Kevin Bourrillion (kevinb9n (a] gmail.com)
   6393  @since 2.0]]>
   6394     </doc>
   6395   </class>
   6396   <!-- end class com.google.inject.util.Providers -->
   6397   <!-- start class com.google.inject.util.Types -->
   6398   <class name="Types" extends="java.lang.Object"
   6399     abstract="false"
   6400     static="false" final="true" visibility="public"
   6401     deprecated="not deprecated">
   6402     <method name="newParameterizedType" return="java.lang.reflect.ParameterizedType"
   6403       abstract="false" native="false" synchronized="false"
   6404       static="true" final="false" visibility="public"
   6405       deprecated="not deprecated">
   6406       <param name="rawType" type="java.lang.reflect.Type"/>
   6407       <param name="typeArguments" type="java.lang.reflect.Type[]"/>
   6408       <doc>
   6409       <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
   6410  {@code rawType}. The returned type does not have an owner type.
   6411 
   6412  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6413       </doc>
   6414     </method>
   6415     <method name="newParameterizedTypeWithOwner" return="java.lang.reflect.ParameterizedType"
   6416       abstract="false" native="false" synchronized="false"
   6417       static="true" final="false" visibility="public"
   6418       deprecated="not deprecated">
   6419       <param name="ownerType" type="java.lang.reflect.Type"/>
   6420       <param name="rawType" type="java.lang.reflect.Type"/>
   6421       <param name="typeArguments" type="java.lang.reflect.Type[]"/>
   6422       <doc>
   6423       <![CDATA[Returns a new parameterized type, applying {@code typeArguments} to
   6424  {@code rawType} and enclosed by {@code ownerType}.
   6425 
   6426  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6427       </doc>
   6428     </method>
   6429     <method name="arrayOf" return="java.lang.reflect.GenericArrayType"
   6430       abstract="false" native="false" synchronized="false"
   6431       static="true" final="false" visibility="public"
   6432       deprecated="not deprecated">
   6433       <param name="componentType" type="java.lang.reflect.Type"/>
   6434       <doc>
   6435       <![CDATA[Returns an array type whose elements are all instances of
   6436  {@code componentType}.
   6437 
   6438  @return a {@link java.io.Serializable serializable} generic array type.]]>
   6439       </doc>
   6440     </method>
   6441     <method name="subtypeOf" return="java.lang.reflect.WildcardType"
   6442       abstract="false" native="false" synchronized="false"
   6443       static="true" final="false" visibility="public"
   6444       deprecated="not deprecated">
   6445       <param name="bound" type="java.lang.reflect.Type"/>
   6446       <doc>
   6447       <![CDATA[Returns a type that represents an unknown type that extends {@code bound}.
   6448  For example, if {@code bound} is {@code CharSequence.class}, this returns
   6449  {@code ? extends CharSequence}. If {@code bound} is {@code Object.class},
   6450  this returns {@code ?}, which is shorthand for {@code ? extends Object}.]]>
   6451       </doc>
   6452     </method>
   6453     <method name="supertypeOf" return="java.lang.reflect.WildcardType"
   6454       abstract="false" native="false" synchronized="false"
   6455       static="true" final="false" visibility="public"
   6456       deprecated="not deprecated">
   6457       <param name="bound" type="java.lang.reflect.Type"/>
   6458       <doc>
   6459       <![CDATA[Returns a type that represents an unknown supertype of {@code bound}. For
   6460  example, if {@code bound} is {@code String.class}, this returns {@code ?
   6461  super String}.]]>
   6462       </doc>
   6463     </method>
   6464     <method name="listOf" return="java.lang.reflect.ParameterizedType"
   6465       abstract="false" native="false" synchronized="false"
   6466       static="true" final="false" visibility="public"
   6467       deprecated="not deprecated">
   6468       <param name="elementType" type="java.lang.reflect.Type"/>
   6469       <doc>
   6470       <![CDATA[Returns a type modelling a {@link List} whose elements are of type
   6471  {@code elementType}.
   6472 
   6473  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6474       </doc>
   6475     </method>
   6476     <method name="setOf" return="java.lang.reflect.ParameterizedType"
   6477       abstract="false" native="false" synchronized="false"
   6478       static="true" final="false" visibility="public"
   6479       deprecated="not deprecated">
   6480       <param name="elementType" type="java.lang.reflect.Type"/>
   6481       <doc>
   6482       <![CDATA[Returns a type modelling a {@link Set} whose elements are of type
   6483  {@code elementType}.
   6484 
   6485  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6486       </doc>
   6487     </method>
   6488     <method name="mapOf" return="java.lang.reflect.ParameterizedType"
   6489       abstract="false" native="false" synchronized="false"
   6490       static="true" final="false" visibility="public"
   6491       deprecated="not deprecated">
   6492       <param name="keyType" type="java.lang.reflect.Type"/>
   6493       <param name="valueType" type="java.lang.reflect.Type"/>
   6494       <doc>
   6495       <![CDATA[Returns a type modelling a {@link Map} whose keys are of type
   6496  {@code keyType} and whose values are of type {@code valueType}.
   6497 
   6498  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6499       </doc>
   6500     </method>
   6501     <method name="providerOf" return="java.lang.reflect.ParameterizedType"
   6502       abstract="false" native="false" synchronized="false"
   6503       static="true" final="false" visibility="public"
   6504       deprecated="not deprecated">
   6505       <param name="providedType" type="java.lang.reflect.Type"/>
   6506       <doc>
   6507       <![CDATA[Returns a type modelling a {@link Provider} that provides elements of type
   6508  {@code elementType}.
   6509 
   6510  @return a {@link java.io.Serializable serializable} parameterized type.]]>
   6511       </doc>
   6512     </method>
   6513     <doc>
   6514     <![CDATA[Static methods for working with types.
   6515 
   6516  @author crazybob (a] google.com (Bob Lee)
   6517  @since 2.0]]>
   6518     </doc>
   6519   </class>
   6520   <!-- end class com.google.inject.util.Types -->
   6521 </package>
   6522 
   6523 </api>
   6524