1 /*
2  * Copyright (C) 2017 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.android.support.functional;
18 
19 import static java.lang.annotation.RetentionPolicy.RUNTIME;
20 
21 import dagger.Component;
22 import dagger.Module;
23 import dagger.Provides;
24 import dagger.android.AndroidInjectionModule;
25 import dagger.android.AndroidInjector;
26 import dagger.android.ContributesAndroidInjector;
27 import dagger.android.support.DaggerApplication;
28 import dagger.multibindings.IntoSet;
29 import java.lang.annotation.Retention;
30 import java.util.UUID;
31 import javax.inject.Scope;
32 
33 public final class UsesGeneratedModulesApplication extends DaggerApplication {
34 
35   @Override
applicationInjector()36   protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
37     return DaggerUsesGeneratedModulesApplication_ApplicationComponent.create();
38   }
39 
40   @Component(modules = {ApplicationModule.class, AndroidInjectionModule.class})
41   interface ApplicationComponent extends AndroidInjector<UsesGeneratedModulesApplication> {}
42 
43   @Module
44   abstract static class ApplicationModule {
45     @Provides
46     @IntoSet
addToComponentHierarchy()47     static Class<?> addToComponentHierarchy() {
48       return ApplicationComponent.class;
49     }
50 
51     @ActivityScope
52     @ContributesAndroidInjector(modules = ActivityScopedModule.class)
contributeTestActivityWithScopeInjector()53     abstract TestActivityWithScope contributeTestActivityWithScopeInjector();
54 
55     @ContributesAndroidInjector(modules = DummyActivitySubcomponent.AddToHierarchy.class)
contributeTestActivityInjector()56     abstract TestActivity contributeTestActivityInjector();
57 
58     @ContributesAndroidInjector(modules = DummyInnerActivitySubcomponent.AddToHierarchy.class)
contributeInnerActivityInjector()59     abstract OuterClass.TestInnerClassActivity contributeInnerActivityInjector();
60 
61     @ContributesAndroidInjector(modules = DummyParentFragmentSubcomponent.AddToHierarchy.class)
contributeTestParentFragmentInjector()62     abstract TestParentFragment contributeTestParentFragmentInjector();
63 
64     @ContributesAndroidInjector(modules = DummyChildFragmentSubcomponent.AddToHierarchy.class)
contributeTestChildFragmentInjector()65     abstract TestChildFragment contributeTestChildFragmentInjector();
66 
67     @ContributesAndroidInjector(modules = DummyDialogFragmentSubcomponent.AddToHierarchy.class)
contributeTestDialogFragmentInjector()68     abstract TestDialogFragment contributeTestDialogFragmentInjector();
69 
70     @ContributesAndroidInjector(modules = DummyServiceSubcomponent.AddToHierarchy.class)
contributeTestServiceInjector()71     abstract TestService contributeTestServiceInjector();
72 
73     @ContributesAndroidInjector(modules = DummyIntentServiceSubcomponent.AddToHierarchy.class)
contributeTestIntentServiceInjector()74     abstract TestIntentService contributeTestIntentServiceInjector();
75 
76     @ContributesAndroidInjector(modules = DummyBroadcastReceiverSubcomponent.AddToHierarchy.class)
contributeTestBroadcastReceiverInjector()77     abstract TestBroadcastReceiver contributeTestBroadcastReceiverInjector();
78 
79     @ContributesAndroidInjector(modules = DummyContentProviderSubcomponent.AddToHierarchy.class)
contributeTestContentProviderInjector()80     abstract TestContentProvider contributeTestContentProviderInjector();
81   }
82 
83   @Retention(RUNTIME)
84   @Scope
85   @interface ActivityScope {}
86 
87   @Module
88   static class ActivityScopedModule {
89     @Provides
90     @ActivityScope
provideScopedString()91     static String provideScopedString() {
92       return UUID.randomUUID().toString();
93     }
94   }
95 
96   interface DummyActivitySubcomponent {
97     @Module
98     abstract class AddToHierarchy {
99       @Provides
100       @IntoSet
addDummyValueToComponentHierarchy()101       static Class<?> addDummyValueToComponentHierarchy() {
102         return DummyActivitySubcomponent.class;
103       }
104     }
105   }
106 
107   interface DummyInnerActivitySubcomponent {
108     @Module
109     abstract class AddToHierarchy {
110       @Provides
111       @IntoSet
addDummyValueToComponentHierarchy()112       static Class<?> addDummyValueToComponentHierarchy() {
113         return DummyInnerActivitySubcomponent.class;
114       }
115     }
116   }
117 
118   interface DummyParentFragmentSubcomponent {
119     @Module
120     abstract class AddToHierarchy {
121       @Provides
122       @IntoSet
addDummyValueToComponentHierarchy()123       static Class<?> addDummyValueToComponentHierarchy() {
124         return DummyParentFragmentSubcomponent.class;
125       }
126     }
127   }
128 
129   interface DummyChildFragmentSubcomponent {
130     @Module
131     abstract class AddToHierarchy {
132       @Provides
133       @IntoSet
addDummyValueToComponentHierarchy()134       static Class<?> addDummyValueToComponentHierarchy() {
135         return DummyChildFragmentSubcomponent.class;
136       }
137     }
138   }
139 
140   interface DummyDialogFragmentSubcomponent {
141     @Module
142     abstract class AddToHierarchy {
143       @Provides
144       @IntoSet
addDummyValueToComponentHierarchy()145       static Class<?> addDummyValueToComponentHierarchy() {
146         return DummyDialogFragmentSubcomponent.class;
147       }
148     }
149   }
150 
151   interface DummyServiceSubcomponent {
152     @Module
153     abstract class AddToHierarchy {
154       @Provides
155       @IntoSet
addDummyValueToComponentHierarchy()156       static Class<?> addDummyValueToComponentHierarchy() {
157         return DummyServiceSubcomponent.class;
158       }
159     }
160   }
161 
162   interface DummyIntentServiceSubcomponent {
163     @Module
164     abstract class AddToHierarchy {
165       @Provides
166       @IntoSet
addDummyValueToComponentHierarchy()167       static Class<?> addDummyValueToComponentHierarchy() {
168         return DummyIntentServiceSubcomponent.class;
169       }
170     }
171   }
172 
173   interface DummyBroadcastReceiverSubcomponent {
174     @Module
175     abstract class AddToHierarchy {
176       @Provides
177       @IntoSet
addDummyValueToComponentHierarchy()178       static Class<?> addDummyValueToComponentHierarchy() {
179         return DummyBroadcastReceiverSubcomponent.class;
180       }
181     }
182   }
183 
184   interface DummyContentProviderSubcomponent {
185     @Module
186     abstract class AddToHierarchy {
187       @Provides
188       @IntoSet
addDummyValueToComponentHierarchy()189       static Class<?> addDummyValueToComponentHierarchy() {
190         return DummyContentProviderSubcomponent.class;
191       }
192     }
193   }
194 }
195