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.builder 18 19 import com.google.common.truth.Truth.assertThat 20 import dagger.Component 21 import org.junit.Test 22 import org.junit.runner.RunWith 23 import org.junit.runners.JUnit4 24 25 @RunWith(JUnit4::class) 26 class BuildMethodCovariantReturnInheritedTest { 27 @Component 28 internal interface Simple { 29 interface BuilderSupertype { buildnull30 fun build(): Any 31 } 32 33 @Component.Builder interface Builder : BuilderSupertype 34 } 35 36 internal interface ComponentSupertype 37 38 @Component 39 internal interface GenericBuilderType : ComponentSupertype { 40 interface GenericBuilderSupertype<T> { 41 fun build(): T 42 } 43 44 @Component.Builder interface Builder : GenericBuilderSupertype<ComponentSupertype> 45 } 46 47 internal interface ParameterizedComponentSupertype<T> 48 49 @Component 50 internal interface GenericComponentSupertypeAndBuilderSupertype : 51 ParameterizedComponentSupertype<Any> { 52 53 interface GenericBuilderSupertype<T> { buildnull54 fun build(): ParameterizedComponentSupertype<T> 55 } 56 57 @Component.Builder interface Builder : GenericBuilderSupertype<Any> 58 } 59 60 @Test 61 fun simpleComponentTest() { 62 val component = DaggerBuildMethodCovariantReturnInheritedTest_Simple.builder().build() 63 assertThat(component).isInstanceOf(Simple::class.java) 64 } 65 66 @Test genericBuilderTypeTestnull67 fun genericBuilderTypeTest() { 68 val component = 69 DaggerBuildMethodCovariantReturnInheritedTest_GenericBuilderType.builder().build() 70 assertThat(component).isInstanceOf(GenericBuilderType::class.java) 71 } 72 73 @Test genericComponentSupertypeAndBuilderSupertypeTestnull74 fun genericComponentSupertypeAndBuilderSupertypeTest() { 75 val component = 76 DaggerBuildMethodCovariantReturnInheritedTest_GenericComponentSupertypeAndBuilderSupertype 77 .builder() 78 .build() 79 assertThat(component).isInstanceOf(GenericComponentSupertypeAndBuilderSupertype::class.java) 80 } 81 } 82