• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.Subcomponent;
20 
21 @Subcomponent(modules = {StringModule.class, IntModuleIncludingDoubleAndFloat.class,
22     LongModule.class, ByteModule.class})
23 interface TestChildComponentWithBuilderAbstractClass {
s()24   String s();
i()25   int i();
l()26   long l();
f()27   float f();
d()28   double d();
b()29   byte b();
30 
31   abstract class SharedBuilder<B, C, M1, M2> {
build()32     abstract C build(); // Test resolving return type of build()
setM1(M1 m1)33     abstract B setM1(M1 m1); // Test resolving return type & param of setter
setM2(M2 m2)34     abstract SharedBuilder<B, C, M1, M2> setM2(M2 m2); // Test being overridden
setM3(DoubleModule doubleModule)35     abstract void setM3(DoubleModule doubleModule);  // Test being overridden
set(FloatModule floatModule)36     abstract SharedBuilder<B, C, M1, M2> set(FloatModule floatModule); // Test returning supertype.
37   }
38 
39   @Subcomponent.Builder
40   abstract class Builder extends SharedBuilder<Builder, TestChildComponentWithBuilderAbstractClass,
41       StringModule, IntModuleIncludingDoubleAndFloat> {
setM2(IntModuleIncludingDoubleAndFloat m2)42     @Override abstract Builder setM2(IntModuleIncludingDoubleAndFloat m2); // Test covariance
setM3(DoubleModule doubleModule)43     @Override abstract void setM3(DoubleModule doubleModule); // Test simple overrides allowed
set(ByteModule byteModule)44     abstract void set(ByteModule byteModule);
45 
46     // Note we're missing LongModule -- it's implicit
47   }
48 }
49