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