@@ -76,15 +76,15 @@ public final class Component<T> {
76
76
int SET = 1 ;
77
77
}
78
78
79
- private final Set <Class <? super T >> providedInterfaces ;
79
+ private final Set <Qualified <? super T >> providedInterfaces ;
80
80
private final Set <Dependency > dependencies ;
81
81
private final @ Instantiation int instantiation ;
82
82
private final @ ComponentType int type ;
83
83
private final ComponentFactory <T > factory ;
84
84
private final Set <Class <?>> publishedEvents ;
85
85
86
86
private Component (
87
- Set <Class <? super T >> providedInterfaces ,
87
+ Set <Qualified <? super T >> providedInterfaces ,
88
88
Set <Dependency > dependencies ,
89
89
@ Instantiation int instantiation ,
90
90
@ ComponentType int type ,
@@ -103,7 +103,7 @@ private Component(
103
103
*
104
104
* <p>Note: T conforms to all of these interfaces.
105
105
*/
106
- public Set <Class <? super T >> getProvidedInterfaces () {
106
+ public Set <Qualified <? super T >> getProvidedInterfaces () {
107
107
return providedInterfaces ;
108
108
}
109
109
@@ -180,6 +180,18 @@ public static <T> Component.Builder<T> builder(
180
180
return new Builder <>(anInterface , additionalInterfaces );
181
181
}
182
182
183
+ /** Returns a Component<T> builder. */
184
+ public static <T > Component .Builder <T > builder (Qualified <T > anInterface ) {
185
+ return new Builder <>(anInterface );
186
+ }
187
+
188
+ /** Returns a Component<T> builder. */
189
+ @ SafeVarargs
190
+ public static <T > Component .Builder <T > builder (
191
+ Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
192
+ return new Builder <>(anInterface , additionalInterfaces );
193
+ }
194
+
183
195
/**
184
196
* Wraps a value in a {@link Component} with no dependencies.
185
197
*
@@ -197,6 +209,13 @@ public static <T> Component<T> of(
197
209
return builder (anInterface , additionalInterfaces ).factory ((args ) -> value ).build ();
198
210
}
199
211
212
+ /** Wraps a value in a {@link Component} with no dependencies. */
213
+ @ SafeVarargs
214
+ public static <T > Component <T > of (
215
+ T value , Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
216
+ return builder (anInterface , additionalInterfaces ).factory ((args ) -> value ).build ();
217
+ }
218
+
200
219
/**
201
220
* Provides a builder for a {@link Set}-multibinding {@link Component}.
202
221
*
@@ -207,6 +226,16 @@ public static <T> Component.Builder<T> intoSetBuilder(Class<T> anInterface) {
207
226
return builder (anInterface ).intoSet ();
208
227
}
209
228
229
+ /**
230
+ * Provides a builder for a {@link Set}-multibinding {@link Component}.
231
+ *
232
+ * <p>Such components can be requested by dependents via {@link ComponentContainer#setOf(Class)} *
233
+ * or {@link ComponentContainer#setOfProvider(Class)}.
234
+ */
235
+ public static <T > Component .Builder <T > intoSetBuilder (Qualified <T > anInterface ) {
236
+ return builder (anInterface ).intoSet ();
237
+ }
238
+
210
239
/**
211
240
* Wraps a value in a {@link Set}-multibinding {@link Component} with no dependencies. *
212
241
*
@@ -217,21 +246,41 @@ public static <T> Component<T> intoSet(T value, Class<T> anInterface) {
217
246
return intoSetBuilder (anInterface ).factory (c -> value ).build ();
218
247
}
219
248
249
+ /**
250
+ * Wraps a value in a {@link Set}-multibinding {@link Component} with no dependencies. *
251
+ *
252
+ * <p>Such components can be requested by dependents via {@link ComponentContainer#setOf(Class)} *
253
+ * or {@link ComponentContainer#setOfProvider(Class)}.
254
+ */
255
+ public static <T > Component <T > intoSet (T value , Qualified <T > anInterface ) {
256
+ return intoSetBuilder (anInterface ).factory (c -> value ).build ();
257
+ }
258
+
220
259
/** FirebaseComponent builder. */
221
260
public static class Builder <T > {
222
- private final Set <Class <? super T >> providedInterfaces = new HashSet <>();
261
+ private final Set <Qualified <? super T >> providedInterfaces = new HashSet <>();
223
262
private final Set <Dependency > dependencies = new HashSet <>();
224
263
private @ Instantiation int instantiation = Instantiation .LAZY ;
225
264
private @ ComponentType int type = ComponentType .VALUE ;
226
265
private ComponentFactory <T > factory ;
227
- private Set <Class <?>> publishedEvents = new HashSet <>();
266
+ private final Set <Class <?>> publishedEvents = new HashSet <>();
228
267
229
268
@ SafeVarargs
230
269
private Builder (Class <T > anInterface , Class <? super T >... additionalInterfaces ) {
231
270
Preconditions .checkNotNull (anInterface , "Null interface" );
232
- providedInterfaces .add (anInterface );
271
+ providedInterfaces .add (Qualified . unqualified ( anInterface ) );
233
272
for (Class <? super T > iface : additionalInterfaces ) {
234
273
Preconditions .checkNotNull (iface , "Null interface" );
274
+ providedInterfaces .add (Qualified .unqualified (iface ));
275
+ }
276
+ }
277
+
278
+ @ SafeVarargs
279
+ private Builder (Qualified <T > anInterface , Qualified <? super T >... additionalInterfaces ) {
280
+ Preconditions .checkNotNull (anInterface , "Null interface" );
281
+ providedInterfaces .add (anInterface );
282
+ for (Qualified <? super T > iface : additionalInterfaces ) {
283
+ Preconditions .checkNotNull (iface , "Null interface" );
235
284
}
236
285
Collections .addAll (providedInterfaces , additionalInterfaces );
237
286
}
@@ -267,7 +316,7 @@ private Builder<T> setInstantiation(@Instantiation int instantiation) {
267
316
return this ;
268
317
}
269
318
270
- private void validateInterface (Class <?> anInterface ) {
319
+ private void validateInterface (Qualified <?> anInterface ) {
271
320
Preconditions .checkArgument (
272
321
!providedInterfaces .contains (anInterface ),
273
322
"Components are not allowed to depend on interfaces they themselves provide." );
0 commit comments