1 /*
2  * Copyright (C) 2015 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.builder;
18 
19 import dagger.Component;
20 
21 @Component(
22     modules = {StringModule.class, IntModuleIncludingDoubleAndFloat.class, LongModule.class},
23     dependencies = DepComponent.class)
24 interface TestComponentWithGenericBuilderInterface {
s()25   String s();
i()26   int i();
l()27   long l();
f()28   float f();
d()29   double d();
30 
31   interface SharedBuilder<B, C, M1, M2> {
build()32     C build(); // Test resolving return type of build()
setM1(M1 m1)33     B setM1(M1 m1); // Test resolving return type & param of setter
setM2(M2 m2)34     SharedBuilder<B, C, M1, M2> setM2(M2 m2); // Test being overridden
doubleModule(DoubleModule doubleModule)35     void doubleModule(DoubleModule doubleModule);  // Test being overridden
set(FloatModule floatModule)36     SharedBuilder<B, C, M1, M2> set(FloatModule floatModule); // Test return type is supertype.
37   }
38 
39   @Component.Builder
40   interface Builder extends SharedBuilder<Builder, TestComponentWithGenericBuilderInterface,
41       StringModule, IntModuleIncludingDoubleAndFloat> {
setM2(IntModuleIncludingDoubleAndFloat m2)42     @Override Builder setM2(IntModuleIncludingDoubleAndFloat m2); // Test covariant overrides allowed
doubleModule(DoubleModule module3)43     @Override void doubleModule(DoubleModule module3); // Test simple overrides allowed
depComponent(DepComponent depComponent)44     void depComponent(DepComponent depComponent);
45 
46     // Note we're missing M5 -- that's implicit.
47   }
48 }
49