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