1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2019 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.Component 20*f585d8a3SJacky Wang import dagger.Module 21*f585d8a3SJacky Wang import dagger.Provides 22*f585d8a3SJacky Wang import dagger.functional.kotlin.processor.TriggerGeneratedTypeProcessor 23*f585d8a3SJacky Wang import javax.inject.Inject 24*f585d8a3SJacky Wang import javax.inject.Qualifier 25*f585d8a3SJacky Wang 26*f585d8a3SJacky Wang @Component(modules = [TestKotlinModuleWithQualifier::class]) 27*f585d8a3SJacky Wang interface TestKotlinComponentWithQualifier { injectnull28*f585d8a3SJacky Wang fun inject(testInjectedClassWithQualifier: TestMemberInjectedClassWithQualifier) 29*f585d8a3SJacky Wang fun inject(fooWithInjectedQualifier: FooWithInjectedQualifier) 30*f585d8a3SJacky Wang } 31*f585d8a3SJacky Wang 32*f585d8a3SJacky Wang @Module 33*f585d8a3SJacky Wang class TestKotlinModuleWithQualifier { 34*f585d8a3SJacky Wang @Provides 35*f585d8a3SJacky Wang @JavaTestQualifier 36*f585d8a3SJacky Wang fun provideJavaDataA() = TestDataA("test") 37*f585d8a3SJacky Wang 38*f585d8a3SJacky Wang @Provides 39*f585d8a3SJacky Wang @JavaTestQualifier 40*f585d8a3SJacky Wang fun provideJavaDataB() = TestDataB("test") 41*f585d8a3SJacky Wang 42*f585d8a3SJacky Wang @Provides 43*f585d8a3SJacky Wang @JavaTestQualifierWithTarget 44*f585d8a3SJacky Wang fun provideJavaWithTargetDataA() = TestDataA("test") 45*f585d8a3SJacky Wang 46*f585d8a3SJacky Wang @Provides 47*f585d8a3SJacky Wang @KotlinTestQualifier 48*f585d8a3SJacky Wang fun provideKotlinDataA() = TestDataA("test") 49*f585d8a3SJacky Wang 50*f585d8a3SJacky Wang @Provides 51*f585d8a3SJacky Wang @JavaTestQualifier 52*f585d8a3SJacky Wang fun provideString() = "qualified string" 53*f585d8a3SJacky Wang } 54*f585d8a3SJacky Wang 55*f585d8a3SJacky Wang class TestConstructionInjectedClassWithQualifier @Inject constructor( 56*f585d8a3SJacky Wang @JavaTestQualifier val data: TestDataA 57*f585d8a3SJacky Wang ) 58*f585d8a3SJacky Wang 59*f585d8a3SJacky Wang @TriggerGeneratedTypeProcessor 60*f585d8a3SJacky Wang class TestMemberInjectedClassWithQualifier { 61*f585d8a3SJacky Wang @Inject 62*f585d8a3SJacky Wang @JavaTestQualifier 63*f585d8a3SJacky Wang lateinit var javaDataA: TestDataA 64*f585d8a3SJacky Wang 65*f585d8a3SJacky Wang @Inject 66*f585d8a3SJacky Wang @field:JavaTestQualifier 67*f585d8a3SJacky Wang lateinit var javaDataB: TestDataB 68*f585d8a3SJacky Wang 69*f585d8a3SJacky Wang @Inject 70*f585d8a3SJacky Wang @JavaTestQualifierWithTarget 71*f585d8a3SJacky Wang lateinit var javaWithTargetDataA: TestDataA 72*f585d8a3SJacky Wang 73*f585d8a3SJacky Wang @Inject 74*f585d8a3SJacky Wang @JavaTestQualifier 75*f585d8a3SJacky Wang lateinit var kotlinDataA: TestDataA 76*f585d8a3SJacky Wang 77*f585d8a3SJacky Wang @Inject 78*f585d8a3SJacky Wang lateinit var dataWithConstructionInjection: TestConstructionInjectedClassWithQualifier 79*f585d8a3SJacky Wang 80*f585d8a3SJacky Wang val noBackingFieldProperty: Int 81*f585d8a3SJacky Wang get() = 0 82*f585d8a3SJacky Wang <lambda>null83*f585d8a3SJacky Wang val delegatedProperty by lazy { "" } 84*f585d8a3SJacky Wang 85*f585d8a3SJacky Wang val generatedTypeProperty = dagger.functional.kotlin.GeneratedType() 86*f585d8a3SJacky Wang <lambda>null87*f585d8a3SJacky Wang val generatedTypeDelegatedProperty by lazy { dagger.functional.kotlin.GeneratedType() } 88*f585d8a3SJacky Wang } 89*f585d8a3SJacky Wang 90*f585d8a3SJacky Wang data class TestDataA(val data: String) 91*f585d8a3SJacky Wang data class TestDataB(val data: String) 92*f585d8a3SJacky Wang 93*f585d8a3SJacky Wang @Qualifier 94*f585d8a3SJacky Wang @Retention(AnnotationRetention.RUNTIME) 95*f585d8a3SJacky Wang annotation class KotlinTestQualifier 96