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