-
Notifications
You must be signed in to change notification settings - Fork 78
/
SyntheticBeanBuilder.java
85 lines (56 loc) · 3.25 KB
/
SyntheticBeanBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package jakarta.enterprise.inject.build.compatible.spi;
import jakarta.enterprise.lang.model.AnnotationMember;
import jakarta.enterprise.lang.model.AnnotationInfo;
import jakarta.enterprise.lang.model.declarations.ClassInfo;
import jakarta.enterprise.lang.model.types.Type;
import java.lang.annotation.Annotation;
/**
* Instances are not reusable. For each synthetic bean, new instance
* must be created by {@link SyntheticComponents#addBean(Class)}.
*
* @param <T> type of bean instances
*/
public interface SyntheticBeanBuilder<T> {
// TODO should have the type parameter? (see also SyntheticObserverBuilder and SyntheticComponents)
// can be called multiple times and is additive
// TODO methods to add multiple types at once?
SyntheticBeanBuilder<T> type(Class<?> type);
SyntheticBeanBuilder<T> type(ClassInfo<?> type);
SyntheticBeanBuilder<T> type(Type type);
// can be called multiple times and is additive
// TODO methods to add multiple qualifiers at once?
SyntheticBeanBuilder<T> qualifier(Class<? extends Annotation> qualifierAnnotation, AnnotationMember... attributes);
SyntheticBeanBuilder<T> qualifier(ClassInfo<?> qualifierAnnotation, AnnotationMember... attributes);
SyntheticBeanBuilder<T> qualifier(AnnotationInfo qualifierAnnotation);
SyntheticBeanBuilder<T> qualifier(Annotation qualifierAnnotation);
// if called multiple times, last call wins
// if not called, defaults to @Dependent
SyntheticBeanBuilder<T> scope(Class<? extends Annotation> scopeAnnotation);
// if called with `true`, priority is automatically 0, unless `priority` is also called
// if called multiple times, last call wins
SyntheticBeanBuilder<T> alternative(boolean isAlternative);
// if called, alternative is automatically true
// if called multiple times, last call wins
SyntheticBeanBuilder<T> priority(int priority);
// EL name (equivalent to @Named), IIUC
// if called multiple times, last call wins
SyntheticBeanBuilder<T> name(String name);
// can be called multiple times and is additive
SyntheticBeanBuilder<T> stereotype(Class<? extends Annotation> stereotypeAnnotation);
SyntheticBeanBuilder<T> stereotype(ClassInfo<?> stereotypeAnnotation);
// params for creation and destruction functions
SyntheticBeanBuilder<T> withParam(String key, boolean value);
SyntheticBeanBuilder<T> withParam(String key, boolean[] value);
SyntheticBeanBuilder<T> withParam(String key, int value);
SyntheticBeanBuilder<T> withParam(String key, int[] value);
SyntheticBeanBuilder<T> withParam(String key, long value);
SyntheticBeanBuilder<T> withParam(String key, long[] value);
SyntheticBeanBuilder<T> withParam(String key, double value);
SyntheticBeanBuilder<T> withParam(String key, double[] value);
SyntheticBeanBuilder<T> withParam(String key, String value);
SyntheticBeanBuilder<T> withParam(String key, String[] value);
SyntheticBeanBuilder<T> withParam(String key, Class<?> value);
SyntheticBeanBuilder<T> withParam(String key, Class<?>[] value);
SyntheticBeanBuilder<T> createWith(Class<? extends SyntheticBeanCreator<T>> creatorClass);
SyntheticBeanBuilder<T> disposeWith(Class<? extends SyntheticBeanDisposer<T>> disposerClass);
}