51
51
import static java .util .Collections .*;
52
52
import static java .util .Objects .requireNonNull ;
53
53
import static org .geektimes .commons .collection .util .CollectionUtils .newLinkedHashSet ;
54
- import static org .geektimes .commons .collection .util .CollectionUtils .asSet ;
55
54
import static org .geektimes .commons .lang .util .StringUtils .endsWith ;
56
55
import static org .geektimes .commons .lang .util .StringUtils .isBlank ;
57
56
import static org .geektimes .enterprise .inject .standard .beans .BeanArchiveType .EXPLICIT ;
@@ -80,25 +79,18 @@ public class BeanArchiveManager {
80
79
81
80
private final SimpleClassScanner classScanner ;
82
81
83
- // Discovered types
82
+ private final Map < BeanTypeSource , List < Class <?>>> beanClasses ;
84
83
85
- private final Set < Class <?>> beanClasses ;
84
+ private final Map < BeanTypeSource , List < Class <?>>> interceptorClasses ;
86
85
87
- private final List <Class <?>> interceptorClasses ;
86
+ private final Map < BeanTypeSource , List <Class <?>>> decoratorClasses ;
88
87
89
- private final List <Class <?>> decoratorClasses ;
90
-
91
- private final List <Class <?>> alternativeClasses ;
88
+ private final Map <BeanTypeSource , List <Class <?>>> alternativeClasses ;
92
89
93
90
private final Set <Class <? extends Annotation >> alternativeStereotypeClasses ;
94
91
95
92
// Synthetic meta-data
96
93
97
- /**
98
- * Synthetic Bean classes from {@link SeContainerInitializer#addBeanClasses(Class[])}
99
- */
100
- private final Set <Class <?>> syntheticBeanClasses ;
101
-
102
94
/**
103
95
* Synthetic package names from {@link SeContainerInitializer#addPackages(boolean, Package...)}
104
96
* <p>
@@ -147,13 +139,14 @@ public BeanArchiveManager(ClassLoader classLoader) {
147
139
this .classLoader = classLoader ;
148
140
this .beansReader = ServiceLoaders .loadSpi (BeansReader .class , classLoader );
149
141
this .classScanner = SimpleClassScanner .INSTANCE ;
150
- this .beanClasses = new LinkedHashSet <>();
151
- this .interceptorClasses = new LinkedList <>();
152
- this .decoratorClasses = new LinkedList <>();
153
- this .alternativeClasses = new LinkedList <>();
142
+
143
+ this .beanClasses = new LinkedHashMap <>();
144
+ this .interceptorClasses = new LinkedHashMap <>();
145
+ this .decoratorClasses = new LinkedHashMap <>();
146
+ this .alternativeClasses = new LinkedHashMap <>();
147
+
154
148
this .alternativeStereotypeClasses = new LinkedHashSet <>();
155
149
156
- this .syntheticBeanClasses = new LinkedHashSet <>();
157
150
this .syntheticPackagesToScan = new TreeMap <>();
158
151
this .syntheticQualifiers = new LinkedHashSet <>();
159
152
this .syntheticStereotypes = new LinkedHashMap <>();
@@ -165,21 +158,18 @@ public BeanArchiveManager(ClassLoader classLoader) {
165
158
this .scanImplicitEnabled = false ;
166
159
}
167
160
168
- public BeanArchiveManager addSyntheticPackage (Package packageToScan , boolean scanRecursively ) {
161
+ public void addSyntheticPackage (Package packageToScan , boolean scanRecursively ) {
169
162
requireNonNull (packageToScan , "The 'packageToScan' argument must not be null!" );
170
- return addSyntheticPackage (packageToScan .getName (), scanRecursively );
163
+ addSyntheticPackage (packageToScan .getName (), scanRecursively );
171
164
}
172
165
173
- public BeanArchiveManager addSyntheticPackage (String packageToScan , boolean scanRecursively ) {
166
+ public void addSyntheticPackage (String packageToScan , boolean scanRecursively ) {
174
167
requireNonNull (packageToScan , "The 'packageToScan' argument must not be null!" );
175
168
this .syntheticPackagesToScan .put (packageToScan , scanRecursively );
176
- return this ;
177
169
}
178
170
179
- public BeanArchiveManager addSyntheticBeanClass (Class <?> beanClass ) {
180
- requireNonNull (beanClass , "The 'beanClass' argument must not be null!" );
181
- this .syntheticBeanClasses .add (beanClass );
182
- return this ;
171
+ public void addSyntheticBeanClass (Class <?> beanClass ) {
172
+ addBeanType (beanClass , BeanTypeSource .SYNTHETIC , beanClasses );
183
173
}
184
174
185
175
public BeanArchiveManager addSyntheticQualifier (Class <? extends Annotation > qualifier ) {
@@ -221,6 +211,24 @@ private void discoverBeanClasses(Set<Class<?>> discoveredTypes) {
221
211
this ::addBeanClass );
222
212
}
223
213
214
+
215
+ private void addEnabledBeanClass (Class <?> beanClass ) {
216
+ addBeanType (beanClass , BeanTypeSource .ENABLED , beanClasses );
217
+ }
218
+
219
+ private void addDiscoveredBeanClass (Class <?> beanClass ) {
220
+ addBeanType (beanClass , BeanTypeSource .DISCOVERED , beanClasses );
221
+ }
222
+
223
+ private static void addBeanType (Class <?> beanType , BeanTypeSource beanTypeSource ,
224
+ Map <BeanTypeSource , List <Class <?>>> beanTypesRepository ) {
225
+ requireNonNull (beanType , "The 'class' argument must not be null!" );
226
+ List <Class <?>> beanTypes = beanTypesRepository .computeIfAbsent (beanTypeSource , source -> new LinkedList <>());
227
+ if (!beanTypes .contains (beanType )) {
228
+ beanTypes .add (beanType );
229
+ }
230
+ }
231
+
224
232
/**
225
233
* Add provided bean classes.
226
234
*
@@ -251,7 +259,7 @@ public BeanArchiveManager addAlternativeClass(Class<?> alternativeClass) {
251
259
*
252
260
* @param interceptors
253
261
*/
254
- private void addInterceptors (org .geektimes .enterprise .inject .standard .beans .xml .bind .Interceptors interceptors ) {
262
+ private void enableInterceptors (org .geektimes .enterprise .inject .standard .beans .xml .bind .Interceptors interceptors ) {
255
263
if (interceptors != null ) {
256
264
List <String > classNames = interceptors .getClazz ();
257
265
loadAnnotatedClasses (classNames , javax .interceptor .Interceptor .class )
@@ -288,7 +296,7 @@ public BeanArchiveManager addInterceptorClass(Class<?> interceptorClass) throws
288
296
*
289
297
* @param decorators
290
298
*/
291
- private void addDecorators (org .geektimes .enterprise .inject .standard .beans .xml .bind .Decorators decorators ) {
299
+ private void enableDecorators (org .geektimes .enterprise .inject .standard .beans .xml .bind .Decorators decorators ) {
292
300
if (decorators != null ) {
293
301
List <String > classNames = decorators .getClazz ();
294
302
loadAnnotatedClasses (classNames , javax .decorator .Decorator .class )
@@ -309,7 +317,7 @@ public BeanArchiveManager addDecoratorClass(Class<?> decoratorClass) {
309
317
}
310
318
311
319
312
- private void addAlternatives (Alternatives alternatives ) {
320
+ private void enableAlternatives (Alternatives alternatives ) {
313
321
// alternatives.getClazzOrStereotype()
314
322
// .stream()
315
323
// .map(this::)
@@ -392,14 +400,14 @@ public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation> stere
392
400
*/
393
401
public void discoverTypes () {
394
402
if (!discovered ) {
395
- discoverTypesInBeanArchives ();
396
- discoverTypesInNonBeanArchivesAsImplicit ();
403
+ discoverTypesInExplicitBeanArchives ();
404
+ discoverTypesInImplicitBeanArchives ();
397
405
discoverTypesInSyntheticBeanArchives ();
398
406
discovered = true ;
399
407
}
400
408
}
401
409
402
- private void discoverTypesInBeanArchives () {
410
+ private void discoverTypesInExplicitBeanArchives () {
403
411
try {
404
412
Enumeration <URL > beansXMLResources = classLoader .getResources (BEANS_XML_RESOURCE_NAME );
405
413
while (beansXMLResources .hasMoreElements ()) {
@@ -434,7 +442,7 @@ private void discoverTypesInBeanArchives() {
434
442
* <code>"javax.enterprise.inject.scan.implicit"</code> as key and Boolean.TRUE as value.</li>
435
443
* </ul>
436
444
*/
437
- private void discoverTypesInNonBeanArchivesAsImplicit () {
445
+ private void discoverTypesInImplicitBeanArchives () {
438
446
if (isScanImplicitEnabled ()) {
439
447
Set <String > classPaths = ClassPathUtils .getClassPaths ();
440
448
classPaths .stream ().map (File ::new ).forEach (archiveFile -> {
@@ -484,11 +492,11 @@ private void discoverTypesInExplicitBeanArchive(URL beansXMLResource, Beans bean
484
492
// Exclude filters
485
493
excludeFilters (discoveredTypes , beans );
486
494
// Add Interceptor classes
487
- addInterceptors (beans .getInterceptors ());
495
+ enableInterceptors (beans .getInterceptors ());
488
496
// Add Decorator classes
489
- addDecorators (beans .getDecorators ());
497
+ enableDecorators (beans .getDecorators ());
490
498
// Add Alternative classes
491
- addAlternatives (beans .getAlternatives ());
499
+ enableAlternatives (beans .getAlternatives ());
492
500
// Trimmed bean archive
493
501
if (!trimBeanArchive (discoveredTypes , beans )) {
494
502
// Add bean classes from the remaining discovered types
0 commit comments