1 /*
2  * Copyright (C) 2014 The Dagger Authors.
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 dagger.producers;
18 
19 import static java.lang.annotation.ElementType.TYPE;
20 import static java.lang.annotation.RetentionPolicy.RUNTIME;
21 
22 import dagger.Module;
23 import dagger.internal.Beta;
24 import java.lang.annotation.Documented;
25 import java.lang.annotation.Retention;
26 import java.lang.annotation.Target;
27 
28 /**
29  * Annotates a class that contributes {@link Produces} bindings to the production component.
30  *
31  * @since 2.0
32  */
33 @Documented
34 @Target(TYPE)
35 @Retention(RUNTIME)
36 @Beta
37 public @interface ProducerModule {
38   /**
39    * Additional {@code @ProducerModule}- or {@link Module}-annotated classes from which this module
40    * is composed. The de-duplicated contributions of the modules in {@code includes}, and of their
41    * inclusions recursively, are all contributed to the object graph.
42    */
includes()43   Class<?>[] includes() default {};
44 
45   /**
46    * Any {@link dagger.Subcomponent}- or {@link ProductionSubcomponent}-annotated classes which
47    * should be children of the component in which this module is installed. A subcomponent may be
48    * listed in more than one module in a component.
49    *
50    * @since 2.7
51    */
subcomponents()52   Class<?>[] subcomponents() default {};
53 }
54