1*f585d8a3SJacky Wang /* 2*f585d8a3SJacky Wang * Copyright (C) 2015 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.multibindings; 18*f585d8a3SJacky Wang 19*f585d8a3SJacky Wang import dagger.Module; 20*f585d8a3SJacky Wang import dagger.Provides; 21*f585d8a3SJacky Wang import dagger.multibindings.ClassKey; 22*f585d8a3SJacky Wang import dagger.multibindings.ElementsIntoSet; 23*f585d8a3SJacky Wang import dagger.multibindings.IntKey; 24*f585d8a3SJacky Wang import dagger.multibindings.IntoMap; 25*f585d8a3SJacky Wang import dagger.multibindings.IntoSet; 26*f585d8a3SJacky Wang import dagger.multibindings.LongKey; 27*f585d8a3SJacky Wang import dagger.multibindings.StringKey; 28*f585d8a3SJacky Wang import java.math.BigDecimal; 29*f585d8a3SJacky Wang import java.math.BigInteger; 30*f585d8a3SJacky Wang import java.util.Collection; 31*f585d8a3SJacky Wang import java.util.HashSet; 32*f585d8a3SJacky Wang import java.util.Map; 33*f585d8a3SJacky Wang import java.util.Set; 34*f585d8a3SJacky Wang import javax.inject.Named; 35*f585d8a3SJacky Wang import javax.inject.Provider; 36*f585d8a3SJacky Wang 37*f585d8a3SJacky Wang @Module 38*f585d8a3SJacky Wang class MultibindingModule { 39*f585d8a3SJacky Wang @Provides 40*f585d8a3SJacky Wang @IntoMap 41*f585d8a3SJacky Wang @StringKey("foo") provideFooKey(@uppressWarnings"unused") double doubleDependency)42*f585d8a3SJacky Wang static String provideFooKey(@SuppressWarnings("unused") double doubleDependency) { 43*f585d8a3SJacky Wang return "foo value"; 44*f585d8a3SJacky Wang } 45*f585d8a3SJacky Wang 46*f585d8a3SJacky Wang @Provides 47*f585d8a3SJacky Wang @IntoMap 48*f585d8a3SJacky Wang @StringKey("bar") provideBarKey()49*f585d8a3SJacky Wang static String provideBarKey() { 50*f585d8a3SJacky Wang return "bar value"; 51*f585d8a3SJacky Wang } 52*f585d8a3SJacky Wang 53*f585d8a3SJacky Wang @Provides 54*f585d8a3SJacky Wang @IntoMap 55*f585d8a3SJacky Wang @StringKey("foo") provideFooArrayValue(@uppressWarnings"unused") double doubleDependency)56*f585d8a3SJacky Wang static String[] provideFooArrayValue(@SuppressWarnings("unused") double doubleDependency) { 57*f585d8a3SJacky Wang return new String[] {"foo1", "foo2"}; 58*f585d8a3SJacky Wang } 59*f585d8a3SJacky Wang 60*f585d8a3SJacky Wang @Provides 61*f585d8a3SJacky Wang @IntoMap 62*f585d8a3SJacky Wang @StringKey("bar") provideBarArrayValue()63*f585d8a3SJacky Wang static String[] provideBarArrayValue() { 64*f585d8a3SJacky Wang return new String[] {"bar1", "bar2"}; 65*f585d8a3SJacky Wang } 66*f585d8a3SJacky Wang 67*f585d8a3SJacky Wang @Provides 68*f585d8a3SJacky Wang @IntoSet provideFiveToSet()69*f585d8a3SJacky Wang static int provideFiveToSet() { 70*f585d8a3SJacky Wang return 5; 71*f585d8a3SJacky Wang } 72*f585d8a3SJacky Wang 73*f585d8a3SJacky Wang @Provides 74*f585d8a3SJacky Wang @IntoSet provideSixToSet()75*f585d8a3SJacky Wang static int provideSixToSet() { 76*f585d8a3SJacky Wang return 6; 77*f585d8a3SJacky Wang } 78*f585d8a3SJacky Wang 79*f585d8a3SJacky Wang @Provides 80*f585d8a3SJacky Wang @ElementsIntoSet provideElementsIntoSet()81*f585d8a3SJacky Wang static Set<Integer> provideElementsIntoSet() { 82*f585d8a3SJacky Wang Set<Integer> set = new HashSet<>(); 83*f585d8a3SJacky Wang set.add(-101); 84*f585d8a3SJacky Wang set.add(-102); 85*f585d8a3SJacky Wang return set; 86*f585d8a3SJacky Wang } 87*f585d8a3SJacky Wang 88*f585d8a3SJacky Wang @Provides provideMapKeys(Map<String, Provider<String>> map)89*f585d8a3SJacky Wang static Set<String> provideMapKeys(Map<String, Provider<String>> map) { 90*f585d8a3SJacky Wang return map.keySet(); 91*f585d8a3SJacky Wang } 92*f585d8a3SJacky Wang 93*f585d8a3SJacky Wang @Provides provideMapValues(Map<String, String> map)94*f585d8a3SJacky Wang static Collection<String> provideMapValues(Map<String, String> map) { 95*f585d8a3SJacky Wang return map.values(); 96*f585d8a3SJacky Wang } 97*f585d8a3SJacky Wang 98*f585d8a3SJacky Wang @Provides 99*f585d8a3SJacky Wang @IntoMap 100*f585d8a3SJacky Wang @NestedAnnotationContainer.NestedWrappedKey(Integer.class) valueForInteger()101*f585d8a3SJacky Wang static String valueForInteger() { 102*f585d8a3SJacky Wang return "integer"; 103*f585d8a3SJacky Wang } 104*f585d8a3SJacky Wang 105*f585d8a3SJacky Wang @Provides 106*f585d8a3SJacky Wang @IntoMap 107*f585d8a3SJacky Wang @NestedAnnotationContainer.NestedWrappedKey(Long.class) valueForLong()108*f585d8a3SJacky Wang static String valueForLong() { 109*f585d8a3SJacky Wang return "long"; 110*f585d8a3SJacky Wang } 111*f585d8a3SJacky Wang 112*f585d8a3SJacky Wang @Provides 113*f585d8a3SJacky Wang @IntoMap 114*f585d8a3SJacky Wang @ClassKey(Integer.class) valueForClassInteger()115*f585d8a3SJacky Wang static String valueForClassInteger() { 116*f585d8a3SJacky Wang return "integer"; 117*f585d8a3SJacky Wang } 118*f585d8a3SJacky Wang 119*f585d8a3SJacky Wang @Provides 120*f585d8a3SJacky Wang @IntoMap 121*f585d8a3SJacky Wang @ClassKey(Long.class) valueForClassLong()122*f585d8a3SJacky Wang static String valueForClassLong() { 123*f585d8a3SJacky Wang return "long"; 124*f585d8a3SJacky Wang } 125*f585d8a3SJacky Wang 126*f585d8a3SJacky Wang @Provides 127*f585d8a3SJacky Wang @IntoMap 128*f585d8a3SJacky Wang @NumberClassKey(BigDecimal.class) valueForNumberClassBigDecimal()129*f585d8a3SJacky Wang static String valueForNumberClassBigDecimal() { 130*f585d8a3SJacky Wang return "bigdecimal"; 131*f585d8a3SJacky Wang } 132*f585d8a3SJacky Wang 133*f585d8a3SJacky Wang @Provides 134*f585d8a3SJacky Wang @IntoMap 135*f585d8a3SJacky Wang @NumberClassKey(BigInteger.class) valueForNumberClassBigInteger()136*f585d8a3SJacky Wang static String valueForNumberClassBigInteger() { 137*f585d8a3SJacky Wang return "biginteger"; 138*f585d8a3SJacky Wang } 139*f585d8a3SJacky Wang 140*f585d8a3SJacky Wang @Provides 141*f585d8a3SJacky Wang @IntoMap 142*f585d8a3SJacky Wang @LongKey(100) valueFor100Long()143*f585d8a3SJacky Wang static String valueFor100Long() { 144*f585d8a3SJacky Wang return "100 long"; 145*f585d8a3SJacky Wang } 146*f585d8a3SJacky Wang 147*f585d8a3SJacky Wang @Provides 148*f585d8a3SJacky Wang @IntoMap 149*f585d8a3SJacky Wang @IntKey(100) valueFor100Int()150*f585d8a3SJacky Wang static String valueFor100Int() { 151*f585d8a3SJacky Wang return "100 int"; 152*f585d8a3SJacky Wang } 153*f585d8a3SJacky Wang 154*f585d8a3SJacky Wang @Provides 155*f585d8a3SJacky Wang @IntoMap 156*f585d8a3SJacky Wang @ShortKey(100) valueFor100Short()157*f585d8a3SJacky Wang static String valueFor100Short() { 158*f585d8a3SJacky Wang return "100 short"; 159*f585d8a3SJacky Wang } 160*f585d8a3SJacky Wang 161*f585d8a3SJacky Wang @Provides 162*f585d8a3SJacky Wang @IntoMap 163*f585d8a3SJacky Wang @ByteKey(100) valueFor100Byte()164*f585d8a3SJacky Wang static String valueFor100Byte() { 165*f585d8a3SJacky Wang return "100 byte"; 166*f585d8a3SJacky Wang } 167*f585d8a3SJacky Wang 168*f585d8a3SJacky Wang @Provides 169*f585d8a3SJacky Wang @IntoMap 170*f585d8a3SJacky Wang @BooleanKey(true) valueForTrue()171*f585d8a3SJacky Wang static String valueForTrue() { 172*f585d8a3SJacky Wang return "true"; 173*f585d8a3SJacky Wang } 174*f585d8a3SJacky Wang 175*f585d8a3SJacky Wang @Provides 176*f585d8a3SJacky Wang @IntoMap 177*f585d8a3SJacky Wang @CharKey('a') valueForA()178*f585d8a3SJacky Wang static String valueForA() { 179*f585d8a3SJacky Wang return "a char"; 180*f585d8a3SJacky Wang } 181*f585d8a3SJacky Wang 182*f585d8a3SJacky Wang @Provides 183*f585d8a3SJacky Wang @IntoMap 184*f585d8a3SJacky Wang @CharKey('\n') valueForNewline()185*f585d8a3SJacky Wang static String valueForNewline() { 186*f585d8a3SJacky Wang return "newline char"; 187*f585d8a3SJacky Wang } 188*f585d8a3SJacky Wang 189*f585d8a3SJacky Wang @Provides 190*f585d8a3SJacky Wang @IntoMap 191*f585d8a3SJacky Wang @UnwrappedAnnotationKey(@StringKey("foo\n")) valueForUnwrappedAnnotationKeyFoo()192*f585d8a3SJacky Wang static String valueForUnwrappedAnnotationKeyFoo() { 193*f585d8a3SJacky Wang return "foo annotation"; 194*f585d8a3SJacky Wang } 195*f585d8a3SJacky Wang 196*f585d8a3SJacky Wang @Provides 197*f585d8a3SJacky Wang @IntoMap 198*f585d8a3SJacky Wang @WrappedAnnotationKey( 199*f585d8a3SJacky Wang value = @StringKey("foo"), 200*f585d8a3SJacky Wang integers = {1, 2, 3}, 201*f585d8a3SJacky Wang annotations = {}, 202*f585d8a3SJacky Wang classes = {Long.class, Integer.class} 203*f585d8a3SJacky Wang ) valueForWrappedAnnotationKeyFoo()204*f585d8a3SJacky Wang static String valueForWrappedAnnotationKeyFoo() { 205*f585d8a3SJacky Wang return "wrapped foo annotation"; 206*f585d8a3SJacky Wang } 207*f585d8a3SJacky Wang 208*f585d8a3SJacky Wang @Provides 209*f585d8a3SJacky Wang @IntoSet 210*f585d8a3SJacky Wang @Named("complexQualifier") valueForComplexQualifierSet()211*f585d8a3SJacky Wang static String valueForComplexQualifierSet() { 212*f585d8a3SJacky Wang return "foo"; 213*f585d8a3SJacky Wang } 214*f585d8a3SJacky Wang 215*f585d8a3SJacky Wang @Provides 216*f585d8a3SJacky Wang @IntoSet setContribution()217*f585d8a3SJacky Wang static CharSequence setContribution() { 218*f585d8a3SJacky Wang return "foo"; 219*f585d8a3SJacky Wang } 220*f585d8a3SJacky Wang 221*f585d8a3SJacky Wang @Provides 222*f585d8a3SJacky Wang @IntoSet 223*f585d8a3SJacky Wang @Named("complexQualifier") qualifiedSetContribution()224*f585d8a3SJacky Wang static CharSequence qualifiedSetContribution() { 225*f585d8a3SJacky Wang return "qualified foo"; 226*f585d8a3SJacky Wang } 227*f585d8a3SJacky Wang 228*f585d8a3SJacky Wang @Provides 229*f585d8a3SJacky Wang @IntoMap 230*f585d8a3SJacky Wang @StringKey("key") mapContribution()231*f585d8a3SJacky Wang static CharSequence mapContribution() { 232*f585d8a3SJacky Wang return "foo value"; 233*f585d8a3SJacky Wang } 234*f585d8a3SJacky Wang 235*f585d8a3SJacky Wang @Provides 236*f585d8a3SJacky Wang @IntoMap 237*f585d8a3SJacky Wang @Named("complexQualifier") 238*f585d8a3SJacky Wang @StringKey("key") qualifiedMapContribution()239*f585d8a3SJacky Wang static CharSequence qualifiedMapContribution() { 240*f585d8a3SJacky Wang return "qualified foo value"; 241*f585d8a3SJacky Wang } 242*f585d8a3SJacky Wang } 243