1 /*
2  * Copyright (C) 2014 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.inject.testing.fieldbinder;
18 
19 import static java.lang.annotation.ElementType.FIELD;
20 import static java.lang.annotation.RetentionPolicy.RUNTIME;
21 
22 import java.lang.annotation.Retention;
23 import java.lang.annotation.Target;
24 
25 /**
26  * Annotation used by {@link BoundFieldModule} to indicate that a field should be bound to its value
27  * using Guice.
28  *
29  * <p>Binding to {@code null} is only allowed for fields that are annotated {@code @Nullable}. See
30  * <a
31  * href="https://github.com/google/guice/wiki/UseNullable">https://github.com/google/guice/wiki/UseNullable</a>
32  *
33  * @see BoundFieldModule
34  * @author eatnumber1@google.com (Russ Harmon)
35  */
36 @Retention(RUNTIME)
37 @Target({FIELD})
38 public @interface Bind {
39   /**
40    * If specified, {@link BoundFieldModule} will bind the annotated field's value to this type,
41    * rather than to the field's actual type.
42    */
to()43   Class<?> to() default Bind.class;
44 
45   /**
46    * If true, {@link BoundFieldModule} will delay reading the field until injection time rather than
47    * eagerly reading it at configure time.
48    *
49    * <p>When used with Provider valued fields, the provider will be read from the field and {@code
50    * .get()} will be called for each provision. This may be useful for testing provision failures.
51    */
lazy()52   boolean lazy() default false;
53 }
54