1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2016 The Dagger Authors. 3*f585d8a3SJacky Wang * 4*f585d8a3SJacky Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5*f585d8a3SJacky Wang * you may not use this file except in compliance with the License. 6*f585d8a3SJacky Wang * You may obtain a copy of the License at 7*f585d8a3SJacky Wang * 8*f585d8a3SJacky Wang * http://www.apache.org/licenses/LICENSE-2.0 9*f585d8a3SJacky Wang * 10*f585d8a3SJacky Wang * Unless required by applicable law or agreed to in writing, software 11*f585d8a3SJacky Wang * distributed under the License is distributed on an "AS IS" BASIS, 12*f585d8a3SJacky Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*f585d8a3SJacky Wang * See the License for the specific language governing permissions and 14*f585d8a3SJacky Wang * limitations under the License. 15*f585d8a3SJacky Wang */ 16*f585d8a3SJacky Wang 17*f585d8a3SJacky Wang package dagger.functional.binds; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import dagger.Binds; 20*f585d8a3SJacky Wang import dagger.Module; 21*f585d8a3SJacky Wang import dagger.Provides; 22*f585d8a3SJacky Wang import dagger.Reusable; 23*f585d8a3SJacky Wang import dagger.multibindings.ElementsIntoSet; 24*f585d8a3SJacky Wang import dagger.multibindings.IntKey; 25*f585d8a3SJacky Wang import dagger.multibindings.IntoMap; 26*f585d8a3SJacky Wang import dagger.multibindings.IntoSet; 27*f585d8a3SJacky Wang import java.util.Arrays; 28*f585d8a3SJacky Wang import java.util.Collection; 29*f585d8a3SJacky Wang import java.util.HashSet; 30*f585d8a3SJacky Wang import java.util.Set; 31*f585d8a3SJacky Wang import java.util.TreeSet; 32*f585d8a3SJacky Wang import javax.inject.Named; 33*f585d8a3SJacky Wang import javax.inject.Singleton; 34*f585d8a3SJacky Wang 35*f585d8a3SJacky Wang @Module(includes = InterfaceModule.class) 36*f585d8a3SJacky Wang abstract class SimpleBindingModule { 37*f585d8a3SJacky Wang 38*f585d8a3SJacky Wang // Regression test for b/161853413 that binds an implementation that extends a generated class 39*f585d8a3SJacky Wang // that is processed in the same build unit as the @Binds method. 40*f585d8a3SJacky Wang @Binds bindFooFactory(NeedsFactory.SomethingFactoryImpl impl)41*f585d8a3SJacky Wang abstract NeedsFactory.SomethingFactory bindFooFactory(NeedsFactory.SomethingFactoryImpl impl); 42*f585d8a3SJacky Wang 43*f585d8a3SJacky Wang @Binds bindObject(FooOfStrings impl)44*f585d8a3SJacky Wang abstract Object bindObject(FooOfStrings impl); 45*f585d8a3SJacky Wang 46*f585d8a3SJacky Wang @Binds 47*f585d8a3SJacky Wang @Reusable 48*f585d8a3SJacky Wang @SomeQualifier bindReusableObject(FooOfStrings impl)49*f585d8a3SJacky Wang abstract Object bindReusableObject(FooOfStrings impl); 50*f585d8a3SJacky Wang 51*f585d8a3SJacky Wang @Binds bindFooOfStrings(FooOfStrings impl)52*f585d8a3SJacky Wang abstract Foo<String> bindFooOfStrings(FooOfStrings impl); 53*f585d8a3SJacky Wang 54*f585d8a3SJacky Wang @Binds bindFooOfNumbers(Foo<Integer> fooOfIntegers)55*f585d8a3SJacky Wang abstract Foo<? extends Number> bindFooOfNumbers(Foo<Integer> fooOfIntegers); 56*f585d8a3SJacky Wang 57*f585d8a3SJacky Wang @Binds 58*f585d8a3SJacky Wang @Singleton 59*f585d8a3SJacky Wang @SomeQualifier bindQualifiedFooOfStrings(FooOfStrings impl)60*f585d8a3SJacky Wang abstract Foo<String> bindQualifiedFooOfStrings(FooOfStrings impl); 61*f585d8a3SJacky Wang 62*f585d8a3SJacky Wang @Provides provideFooOfIntegers()63*f585d8a3SJacky Wang static Foo<Integer> provideFooOfIntegers() { 64*f585d8a3SJacky Wang return new Foo<Integer>() {}; 65*f585d8a3SJacky Wang } 66*f585d8a3SJacky Wang 67*f585d8a3SJacky Wang @Provides provideFooOfDoubles()68*f585d8a3SJacky Wang static Foo<Double> provideFooOfDoubles() { 69*f585d8a3SJacky Wang return new Foo<Double>() {}; 70*f585d8a3SJacky Wang } 71*f585d8a3SJacky Wang 72*f585d8a3SJacky Wang @Binds 73*f585d8a3SJacky Wang @IntoSet bindFooOfIntegersIntoSet(Foo<Integer> fooOfIntegers)74*f585d8a3SJacky Wang abstract Foo<? extends Number> bindFooOfIntegersIntoSet(Foo<Integer> fooOfIntegers); 75*f585d8a3SJacky Wang 76*f585d8a3SJacky Wang @Binds 77*f585d8a3SJacky Wang @IntoSet bindFooExtendsNumberIntoSet(Foo<Double> fooOfDoubles)78*f585d8a3SJacky Wang abstract Foo<? extends Number> bindFooExtendsNumberIntoSet(Foo<Double> fooOfDoubles); 79*f585d8a3SJacky Wang 80*f585d8a3SJacky Wang @Binds 81*f585d8a3SJacky Wang @ElementsIntoSet bindSetOfFooNumbersToObjects(Set<Foo<? extends Number>> setOfFooNumbers)82*f585d8a3SJacky Wang abstract Set<Object> bindSetOfFooNumbersToObjects(Set<Foo<? extends Number>> setOfFooNumbers); 83*f585d8a3SJacky Wang 84*f585d8a3SJacky Wang @Binds 85*f585d8a3SJacky Wang @IntoSet bindFooOfStringsIntoSetOfObjects(FooOfStrings impl)86*f585d8a3SJacky Wang abstract Object bindFooOfStringsIntoSetOfObjects(FooOfStrings impl); 87*f585d8a3SJacky Wang 88*f585d8a3SJacky Wang @Provides provideStringHashSet()89*f585d8a3SJacky Wang static HashSet<String> provideStringHashSet() { 90*f585d8a3SJacky Wang return new HashSet<>(Arrays.asList("hash-string1", "hash-string2")); 91*f585d8a3SJacky Wang } 92*f585d8a3SJacky Wang 93*f585d8a3SJacky Wang @Provides provideCharSequenceTreeSet()94*f585d8a3SJacky Wang static TreeSet<CharSequence> provideCharSequenceTreeSet() { 95*f585d8a3SJacky Wang return new TreeSet<CharSequence>(Arrays.asList("tree-charSequence1", "tree-charSequence2")); 96*f585d8a3SJacky Wang } 97*f585d8a3SJacky Wang 98*f585d8a3SJacky Wang @Provides provideCharSequenceCollection()99*f585d8a3SJacky Wang static Collection<CharSequence> provideCharSequenceCollection() { 100*f585d8a3SJacky Wang return Arrays.<CharSequence>asList("list-charSequence"); 101*f585d8a3SJacky Wang } 102*f585d8a3SJacky Wang 103*f585d8a3SJacky Wang @Binds 104*f585d8a3SJacky Wang @ElementsIntoSet bindHashSetOfStrings(HashSet<String> set)105*f585d8a3SJacky Wang abstract Set<CharSequence> bindHashSetOfStrings(HashSet<String> set); 106*f585d8a3SJacky Wang 107*f585d8a3SJacky Wang @Binds 108*f585d8a3SJacky Wang @ElementsIntoSet bindTreeSetOfCharSequences(TreeSet<CharSequence> set)109*f585d8a3SJacky Wang abstract Set<CharSequence> bindTreeSetOfCharSequences(TreeSet<CharSequence> set); 110*f585d8a3SJacky Wang 111*f585d8a3SJacky Wang @Binds 112*f585d8a3SJacky Wang @ElementsIntoSet bindCollectionOfCharSequences(Collection<CharSequence> collection)113*f585d8a3SJacky Wang abstract Set<CharSequence> bindCollectionOfCharSequences(Collection<CharSequence> collection); 114*f585d8a3SJacky Wang 115*f585d8a3SJacky Wang @Binds 116*f585d8a3SJacky Wang @IntoMap 117*f585d8a3SJacky Wang @IntKey(123) bind123ForMap(@amed"For-123") String string)118*f585d8a3SJacky Wang abstract Object bind123ForMap(@Named("For-123") String string); 119*f585d8a3SJacky Wang 120*f585d8a3SJacky Wang @Binds 121*f585d8a3SJacky Wang @IntoMap 122*f585d8a3SJacky Wang @IntKey(456) bind456ForMap(@amed"For-456") String string)123*f585d8a3SJacky Wang abstract Object bind456ForMap(@Named("For-456") String string); 124*f585d8a3SJacky Wang 125*f585d8a3SJacky Wang @Provides 126*f585d8a3SJacky Wang @IntoMap 127*f585d8a3SJacky Wang @IntKey(789) provide789ForMap()128*f585d8a3SJacky Wang static Object provide789ForMap() { 129*f585d8a3SJacky Wang return "789-string"; 130*f585d8a3SJacky Wang } 131*f585d8a3SJacky Wang 132*f585d8a3SJacky Wang @Binds 133*f585d8a3SJacky Wang @SomeQualifier primitiveToPrimitive(int intValue)134*f585d8a3SJacky Wang abstract int primitiveToPrimitive(int intValue); 135*f585d8a3SJacky Wang 136*f585d8a3SJacky Wang @Binds 137*f585d8a3SJacky Wang @IntoSet intValueIntoSet(int intValue)138*f585d8a3SJacky Wang abstract int intValueIntoSet(int intValue); 139*f585d8a3SJacky Wang 140*f585d8a3SJacky Wang @Binds 141*f585d8a3SJacky Wang @IntoMap 142*f585d8a3SJacky Wang @IntKey(10) intValueIntoMap(int intValue)143*f585d8a3SJacky Wang abstract int intValueIntoMap(int intValue); 144*f585d8a3SJacky Wang 145*f585d8a3SJacky Wang @Provides intValue()146*f585d8a3SJacky Wang static int intValue() { 147*f585d8a3SJacky Wang return 100; 148*f585d8a3SJacky Wang } 149*f585d8a3SJacky Wang 150*f585d8a3SJacky Wang @Binds 151*f585d8a3SJacky Wang @IntoMap 152*f585d8a3SJacky Wang @IntKey(123) 153*f585d8a3SJacky Wang @SomeQualifier bindFooOfStringsIntoQualifiedMap(FooOfStrings fooOfStrings)154*f585d8a3SJacky Wang abstract Object bindFooOfStringsIntoQualifiedMap(FooOfStrings fooOfStrings); 155*f585d8a3SJacky Wang 156*f585d8a3SJacky Wang @Provides 157*f585d8a3SJacky Wang @Named("For-123") provide123String()158*f585d8a3SJacky Wang static String provide123String() { 159*f585d8a3SJacky Wang return "123-string"; 160*f585d8a3SJacky Wang } 161*f585d8a3SJacky Wang 162*f585d8a3SJacky Wang @Provides 163*f585d8a3SJacky Wang @Named("For-456") provide456String()164*f585d8a3SJacky Wang static String provide456String() { 165*f585d8a3SJacky Wang return "456-string"; 166*f585d8a3SJacky Wang } 167*f585d8a3SJacky Wang } 168