1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2022 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.functional.kotlin 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import dagger.Binds 20*f585d8a3SJacky Wang import dagger.Component 21*f585d8a3SJacky Wang import dagger.Module 22*f585d8a3SJacky Wang import dagger.Provides 23*f585d8a3SJacky Wang import javax.inject.Inject 24*f585d8a3SJacky Wang import javax.inject.Named 25*f585d8a3SJacky Wang 26*f585d8a3SJacky Wang @Component( 27*f585d8a3SJacky Wang modules = [ 28*f585d8a3SJacky Wang TestKotlinModuleWithCompanion::class, 29*f585d8a3SJacky Wang TestKotlinModuleWithNamedCompanion::class, 30*f585d8a3SJacky Wang TestKotlinAbstractModuleWithCompanion::class, 31*f585d8a3SJacky Wang TestKotlinWorkaroundModuleWithCompanion::class, 32*f585d8a3SJacky Wang TestKotlinModuleWithPrivateCompanion::class 33*f585d8a3SJacky Wang ] 34*f585d8a3SJacky Wang ) 35*f585d8a3SJacky Wang interface TestKotlinComponentWithCompanionModule { getDataAnull36*f585d8a3SJacky Wang fun getDataA(): TestDataA 37*f585d8a3SJacky Wang fun getDataB(): TestDataB 38*f585d8a3SJacky Wang fun getBoolean(): Boolean 39*f585d8a3SJacky Wang fun getStringType(): String 40*f585d8a3SJacky Wang @Named("Cat") 41*f585d8a3SJacky Wang fun getCatNamedStringType(): String 42*f585d8a3SJacky Wang @Named("Dog") 43*f585d8a3SJacky Wang fun getDogNamedStringType(): String 44*f585d8a3SJacky Wang 45*f585d8a3SJacky Wang fun getInterface(): TestInterface 46*f585d8a3SJacky Wang fun getLong(): Long 47*f585d8a3SJacky Wang fun getDouble(): Double 48*f585d8a3SJacky Wang fun getInteger(): Int 49*f585d8a3SJacky Wang } 50*f585d8a3SJacky Wang 51*f585d8a3SJacky Wang @Module 52*f585d8a3SJacky Wang class TestKotlinModuleWithCompanion { 53*f585d8a3SJacky Wang @Provides 54*f585d8a3SJacky Wang fun provideDataA() = TestDataA("test") 55*f585d8a3SJacky Wang 56*f585d8a3SJacky Wang companion object { 57*f585d8a3SJacky Wang @Provides 58*f585d8a3SJacky Wang fun provideDataB() = TestDataB("test") 59*f585d8a3SJacky Wang 60*f585d8a3SJacky Wang @Provides 61*f585d8a3SJacky Wang fun provideBoolean(): Boolean = true 62*f585d8a3SJacky Wang } 63*f585d8a3SJacky Wang } 64*f585d8a3SJacky Wang 65*f585d8a3SJacky Wang @Module 66*f585d8a3SJacky Wang class TestKotlinModuleWithNamedCompanion { 67*f585d8a3SJacky Wang 68*f585d8a3SJacky Wang @Provides 69*f585d8a3SJacky Wang @Named("Cat") provideNamedStringnull70*f585d8a3SJacky Wang fun provideNamedString() = "Cat" 71*f585d8a3SJacky Wang 72*f585d8a3SJacky Wang companion object Foo { 73*f585d8a3SJacky Wang @Provides 74*f585d8a3SJacky Wang fun provideStringType(): String = "" 75*f585d8a3SJacky Wang } 76*f585d8a3SJacky Wang } 77*f585d8a3SJacky Wang 78*f585d8a3SJacky Wang @Module 79*f585d8a3SJacky Wang abstract class TestKotlinAbstractModuleWithCompanion { 80*f585d8a3SJacky Wang 81*f585d8a3SJacky Wang @Binds bindInterfacenull82*f585d8a3SJacky Wang abstract fun bindInterface(injectable: TestInjectable): TestInterface 83*f585d8a3SJacky Wang 84*f585d8a3SJacky Wang companion object { 85*f585d8a3SJacky Wang @Provides 86*f585d8a3SJacky Wang fun provideLong() = 4L 87*f585d8a3SJacky Wang } 88*f585d8a3SJacky Wang } 89*f585d8a3SJacky Wang 90*f585d8a3SJacky Wang @Module 91*f585d8a3SJacky Wang class TestKotlinWorkaroundModuleWithCompanion { 92*f585d8a3SJacky Wang 93*f585d8a3SJacky Wang @Provides provideDoublenull94*f585d8a3SJacky Wang fun provideDouble() = 1.0 95*f585d8a3SJacky Wang 96*f585d8a3SJacky Wang @Module 97*f585d8a3SJacky Wang companion object { 98*f585d8a3SJacky Wang @Provides 99*f585d8a3SJacky Wang @JvmStatic 100*f585d8a3SJacky Wang fun provideInteger() = 2 101*f585d8a3SJacky Wang } 102*f585d8a3SJacky Wang } 103*f585d8a3SJacky Wang 104*f585d8a3SJacky Wang @Module 105*f585d8a3SJacky Wang class TestKotlinModuleWithPrivateCompanion { 106*f585d8a3SJacky Wang 107*f585d8a3SJacky Wang @Provides 108*f585d8a3SJacky Wang @Named("Dog") getNamedStringTypenull109*f585d8a3SJacky Wang fun getNamedStringType() = "Dog" 110*f585d8a3SJacky Wang 111*f585d8a3SJacky Wang private companion object { 112*f585d8a3SJacky Wang fun randomFunction() = "" 113*f585d8a3SJacky Wang } 114*f585d8a3SJacky Wang } 115*f585d8a3SJacky Wang 116*f585d8a3SJacky Wang data class TestDataA(val data: String) 117*f585d8a3SJacky Wang data class TestDataB(val data: String) 118*f585d8a3SJacky Wang 119*f585d8a3SJacky Wang interface TestInterface 120*f585d8a3SJacky Wang class TestInjectable @Inject constructor() : TestInterface 121*f585d8a3SJacky Wang 122