xref: /aosp_15_r20/external/dagger2/javatests/dagger/functional/multibindings/MultibindingModule.java (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
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