@@ -80,7 +80,7 @@ public final class Component<T> {
80
80
}
81
81
82
82
private final String name ;
83
- private final Set <Class <? super T >> providedInterfaces ;
83
+ private final Set <Qualified <? super T >> providedInterfaces ;
84
84
private final Set <Dependency > dependencies ;
85
85
private final @ Instantiation int instantiation ;
86
86
private final @ ComponentType int type ;
@@ -89,7 +89,7 @@ public final class Component<T> {
89
89
90
90
private Component (
91
91
@ Nullable String name ,
92
- Set <Class <? super T >> providedInterfaces ,
92
+ Set <Qualified <? super T >> providedInterfaces ,
93
93
Set <Dependency > dependencies ,
94
94
@ Instantiation int instantiation ,
95
95
@ ComponentType int type ,
@@ -119,7 +119,7 @@ public String getName() {
119
119
*
120
120
* <p>Note: T conforms to all of these interfaces.
121
121
*/
122
- public Set <Class <? super T >> getProvidedInterfaces () {
122
+ public Set <Qualified <? super T >> getProvidedInterfaces () {
123
123
return providedInterfaces ;
124
124
}
125
125
@@ -202,6 +202,18 @@ public static <T> Component.Builder<T> builder(
202
202
return new Builder <>(anInterface , additionalInterfaces );
203
203
}
204
204
205
+ /** Returns a Component<T> builder. */
206
+ public static <T > Component .Builder <T > builder (Qualified <T > anInterface ) {
207
+ return new Builder <>(anInterface );
208
+ }
209
+
210
+ /** Returns a Component<T> builder. */
211
+ @ SafeVarargs
212
+ public static <T > Component .Builder <T > builder (
213
+ Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
214
+ return new Builder <>(anInterface , additionalInterfaces );
215
+ }
216
+
205
217
/**
206
218
* Wraps a value in a {@link Component} with no dependencies.
207
219
*
@@ -219,6 +231,13 @@ public static <T> Component<T> of(
219
231
return builder (anInterface , additionalInterfaces ).factory ((args ) -> value ).build ();
220
232
}
221
233
234
+ /** Wraps a value in a {@link Component} with no dependencies. */
235
+ @ SafeVarargs
236
+ public static <T > Component <T > of (
237
+ T value , Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
238
+ return builder (anInterface , additionalInterfaces ).factory ((args ) -> value ).build ();
239
+ }
240
+
222
241
/**
223
242
* Provides a builder for a {@link Set}-multibinding {@link Component}.
224
243
*
@@ -229,6 +248,16 @@ public static <T> Component.Builder<T> intoSetBuilder(Class<T> anInterface) {
229
248
return builder (anInterface ).intoSet ();
230
249
}
231
250
251
+ /**
252
+ * Provides a builder for a {@link Set}-multibinding {@link Component}.
253
+ *
254
+ * <p>Such components can be requested by dependents via {@link ComponentContainer#setOf(Class)} *
255
+ * or {@link ComponentContainer#setOfProvider(Class)}.
256
+ */
257
+ public static <T > Component .Builder <T > intoSetBuilder (Qualified <T > anInterface ) {
258
+ return builder (anInterface ).intoSet ();
259
+ }
260
+
232
261
/**
233
262
* Wraps a value in a {@link Set}-multibinding {@link Component} with no dependencies. *
234
263
*
@@ -239,22 +268,42 @@ public static <T> Component<T> intoSet(T value, Class<T> anInterface) {
239
268
return intoSetBuilder (anInterface ).factory (c -> value ).build ();
240
269
}
241
270
271
+ /**
272
+ * Wraps a value in a {@link Set}-multibinding {@link Component} with no dependencies. *
273
+ *
274
+ * <p>Such components can be requested by dependents via {@link ComponentContainer#setOf(Class)} *
275
+ * or {@link ComponentContainer#setOfProvider(Class)}.
276
+ */
277
+ public static <T > Component <T > intoSet (T value , Qualified <T > anInterface ) {
278
+ return intoSetBuilder (anInterface ).factory (c -> value ).build ();
279
+ }
280
+
242
281
/** FirebaseComponent builder. */
243
282
public static class Builder <T > {
244
283
private String name = null ;
245
- private final Set <Class <? super T >> providedInterfaces = new HashSet <>();
284
+ private final Set <Qualified <? super T >> providedInterfaces = new HashSet <>();
246
285
private final Set <Dependency > dependencies = new HashSet <>();
247
286
private @ Instantiation int instantiation = Instantiation .LAZY ;
248
287
private @ ComponentType int type = ComponentType .VALUE ;
249
288
private ComponentFactory <T > factory ;
250
- private Set <Class <?>> publishedEvents = new HashSet <>();
289
+ private final Set <Class <?>> publishedEvents = new HashSet <>();
251
290
252
291
@ SafeVarargs
253
292
private Builder (Class <T > anInterface , Class <? super T >... additionalInterfaces ) {
254
293
Preconditions .checkNotNull (anInterface , "Null interface" );
255
- providedInterfaces .add (anInterface );
294
+ providedInterfaces .add (Qualified . unqualified ( anInterface ) );
256
295
for (Class <? super T > iface : additionalInterfaces ) {
257
296
Preconditions .checkNotNull (iface , "Null interface" );
297
+ providedInterfaces .add (Qualified .unqualified (iface ));
298
+ }
299
+ }
300
+
301
+ @ SafeVarargs
302
+ private Builder (Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
303
+ Preconditions .checkNotNull (anInterface , "Null interface" );
304
+ providedInterfaces .add (anInterface );
305
+ for (Qualified <? super T > iface : additionalInterfaces ) {
306
+ Preconditions .checkNotNull (iface , "Null interface" );
258
307
}
259
308
Collections .addAll (providedInterfaces , additionalInterfaces );
260
309
}
@@ -301,7 +350,7 @@ private Builder<T> setInstantiation(@Instantiation int instantiation) {
301
350
return this ;
302
351
}
303
352
304
- private void validateInterface (Class <?> anInterface ) {
353
+ private void validateInterface (Qualified <?> anInterface ) {
305
354
Preconditions .checkArgument (
306
355
!providedInterfaces .contains (anInterface ),
307
356
"Components are not allowed to depend on interfaces they themselves provide." );
0 commit comments