1 /* 2 * Copyright (C) 2022 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.functional.kotlinsrc.modules 18 19 import dagger.Component 20 import dagger.Module 21 import dagger.Provides 22 23 /** This tests that @Module.includes are traversed for supertypes of a module. */ 24 internal class ModuleIncludesCollectedFromModuleSuperclasses { 25 @Component(modules = [TopLevelModule::class]) 26 interface C { foonull27 fun foo(): Foo<String> 28 fun includedInTopLevelModule(): Int 29 fun includedFromModuleInheritance(): String 30 } 31 32 @Module(includes = [IncludedTopLevel::class]) 33 class TopLevelModule : FooModule<String>() 34 class Foo<T> 35 36 @Module(includes = [IncludedFromModuleInheritance::class]) 37 abstract class FooModule<T> : FooCreator() { 38 @Provides 39 fun fooOfT(): Foo<T> { 40 return createFoo() 41 } 42 } 43 44 open class FooCreator { createFoonull45 fun <T> createFoo(): Foo<T> { 46 return Foo() 47 } 48 } 49 50 @Module 51 class IncludedTopLevel { inull52 @Provides fun i(): Int = 123 53 } 54 55 @Module 56 class IncludedFromModuleInheritance { 57 @Provides fun inheritedProvision(): String = "inherited" 58 } 59 } 60