15d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin/* 25d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * Copyright (C) 2015 Google, Inc. 35d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * 45d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 55d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * you may not use this file except in compliance with the License. 65d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * You may obtain a copy of the License at 75d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * 85d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 95d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * 105d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * Unless required by applicable law or agreed to in writing, software 115d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 125d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * See the License for the specific language governing permissions and 145d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin * limitations under the License. 155d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin */ 165d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffinpackage test.builder; 175d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin 185d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffinimport dagger.Subcomponent; 195d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin 205d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin@Subcomponent(modules = {StringModule.class, IntModuleIncludingDoubleAndFloat.class, 215d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin LongModule.class, ByteModule.class}) 225d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffininterface TestChildComponentWithBuilderAbstractClass { 235d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin String s(); 245d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin int i(); 255d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin long l(); 265d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin float f(); 275d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin double d(); 285d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin byte b(); 295d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin 305d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract class SharedBuilder<B, C, M1, M2> { 315d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract C build(); // Test resolving return type of build() 325d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract B setM1(M1 m1); // Test resolving return type & param of setter 335d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract SharedBuilder<B, C, M1, M2> setM2(M2 m2); // Test being overridden 345d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract void setM3(DoubleModule doubleModule); // Test being overridden 355d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract SharedBuilder<B, C, M1, M2> set(FloatModule floatModule); // Test returning supertype. 365d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin } 375d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin 385d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin @Subcomponent.Builder 395d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract class Builder extends SharedBuilder<Builder, TestChildComponentWithBuilderAbstractClass, 405d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin StringModule, IntModuleIncludingDoubleAndFloat> { 415d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin @Override abstract Builder setM2(IntModuleIncludingDoubleAndFloat m2); // Test covariance 425d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin @Override abstract void setM3(DoubleModule doubleModule); // Test simple overrides allowed 435d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin abstract void set(ByteModule byteModule); 445d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin 455d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin // Note we're missing LongModule -- it's implicit 465d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin } 475d3207ac2713386ed61c6ca8f0356e8f093a62e1Paul Duffin} 48