Skip to content

Commit 305701a

Browse files
committed
Polish code
1 parent 5c1c7bf commit 305701a

File tree

7 files changed

+178
-48
lines changed

7 files changed

+178
-48
lines changed

projects/stage-1/middleware-frameworks/my-cdi/src/main/java/org/geektimes/enterprise/inject/standard/beans/BeanArchiveManager.java

+43-35
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import static java.util.Collections.*;
5252
import static java.util.Objects.requireNonNull;
5353
import static org.geektimes.commons.collection.util.CollectionUtils.newLinkedHashSet;
54-
import static org.geektimes.commons.collection.util.CollectionUtils.asSet;
5554
import static org.geektimes.commons.lang.util.StringUtils.endsWith;
5655
import static org.geektimes.commons.lang.util.StringUtils.isBlank;
5756
import static org.geektimes.enterprise.inject.standard.beans.BeanArchiveType.EXPLICIT;
@@ -80,25 +79,18 @@ public class BeanArchiveManager {
8079

8180
private final SimpleClassScanner classScanner;
8281

83-
// Discovered types
82+
private final Map<BeanTypeSource, List<Class<?>>> beanClasses;
8483

85-
private final Set<Class<?>> beanClasses;
84+
private final Map<BeanTypeSource, List<Class<?>>> interceptorClasses;
8685

87-
private final List<Class<?>> interceptorClasses;
86+
private final Map<BeanTypeSource, List<Class<?>>> decoratorClasses;
8887

89-
private final List<Class<?>> decoratorClasses;
90-
91-
private final List<Class<?>> alternativeClasses;
88+
private final Map<BeanTypeSource, List<Class<?>>> alternativeClasses;
9289

9390
private final Set<Class<? extends Annotation>> alternativeStereotypeClasses;
9491

9592
// Synthetic meta-data
9693

97-
/**
98-
* Synthetic Bean classes from {@link SeContainerInitializer#addBeanClasses(Class[])}
99-
*/
100-
private final Set<Class<?>> syntheticBeanClasses;
101-
10294
/**
10395
* Synthetic package names from {@link SeContainerInitializer#addPackages(boolean, Package...)}
10496
* <p>
@@ -147,13 +139,14 @@ public BeanArchiveManager(ClassLoader classLoader) {
147139
this.classLoader = classLoader;
148140
this.beansReader = ServiceLoaders.loadSpi(BeansReader.class, classLoader);
149141
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+
154148
this.alternativeStereotypeClasses = new LinkedHashSet<>();
155149

156-
this.syntheticBeanClasses = new LinkedHashSet<>();
157150
this.syntheticPackagesToScan = new TreeMap<>();
158151
this.syntheticQualifiers = new LinkedHashSet<>();
159152
this.syntheticStereotypes = new LinkedHashMap<>();
@@ -165,21 +158,18 @@ public BeanArchiveManager(ClassLoader classLoader) {
165158
this.scanImplicitEnabled = false;
166159
}
167160

168-
public BeanArchiveManager addSyntheticPackage(Package packageToScan, boolean scanRecursively) {
161+
public void addSyntheticPackage(Package packageToScan, boolean scanRecursively) {
169162
requireNonNull(packageToScan, "The 'packageToScan' argument must not be null!");
170-
return addSyntheticPackage(packageToScan.getName(), scanRecursively);
163+
addSyntheticPackage(packageToScan.getName(), scanRecursively);
171164
}
172165

173-
public BeanArchiveManager addSyntheticPackage(String packageToScan, boolean scanRecursively) {
166+
public void addSyntheticPackage(String packageToScan, boolean scanRecursively) {
174167
requireNonNull(packageToScan, "The 'packageToScan' argument must not be null!");
175168
this.syntheticPackagesToScan.put(packageToScan, scanRecursively);
176-
return this;
177169
}
178170

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);
183173
}
184174

185175
public BeanArchiveManager addSyntheticQualifier(Class<? extends Annotation> qualifier) {
@@ -221,6 +211,24 @@ private void discoverBeanClasses(Set<Class<?>> discoveredTypes) {
221211
this::addBeanClass);
222212
}
223213

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+
224232
/**
225233
* Add provided bean classes.
226234
*
@@ -251,7 +259,7 @@ public BeanArchiveManager addAlternativeClass(Class<?> alternativeClass) {
251259
*
252260
* @param interceptors
253261
*/
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) {
255263
if (interceptors != null) {
256264
List<String> classNames = interceptors.getClazz();
257265
loadAnnotatedClasses(classNames, javax.interceptor.Interceptor.class)
@@ -288,7 +296,7 @@ public BeanArchiveManager addInterceptorClass(Class<?> interceptorClass) throws
288296
*
289297
* @param decorators
290298
*/
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) {
292300
if (decorators != null) {
293301
List<String> classNames = decorators.getClazz();
294302
loadAnnotatedClasses(classNames, javax.decorator.Decorator.class)
@@ -309,7 +317,7 @@ public BeanArchiveManager addDecoratorClass(Class<?> decoratorClass) {
309317
}
310318

311319

312-
private void addAlternatives(Alternatives alternatives) {
320+
private void enableAlternatives(Alternatives alternatives) {
313321
// alternatives.getClazzOrStereotype()
314322
// .stream()
315323
// .map(this::)
@@ -392,14 +400,14 @@ public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation> stere
392400
*/
393401
public void discoverTypes() {
394402
if (!discovered) {
395-
discoverTypesInBeanArchives();
396-
discoverTypesInNonBeanArchivesAsImplicit();
403+
discoverTypesInExplicitBeanArchives();
404+
discoverTypesInImplicitBeanArchives();
397405
discoverTypesInSyntheticBeanArchives();
398406
discovered = true;
399407
}
400408
}
401409

402-
private void discoverTypesInBeanArchives() {
410+
private void discoverTypesInExplicitBeanArchives() {
403411
try {
404412
Enumeration<URL> beansXMLResources = classLoader.getResources(BEANS_XML_RESOURCE_NAME);
405413
while (beansXMLResources.hasMoreElements()) {
@@ -434,7 +442,7 @@ private void discoverTypesInBeanArchives() {
434442
* <code>"javax.enterprise.inject.scan.implicit"</code> as key and Boolean.TRUE as value.</li>
435443
* </ul>
436444
*/
437-
private void discoverTypesInNonBeanArchivesAsImplicit() {
445+
private void discoverTypesInImplicitBeanArchives() {
438446
if (isScanImplicitEnabled()) {
439447
Set<String> classPaths = ClassPathUtils.getClassPaths();
440448
classPaths.stream().map(File::new).forEach(archiveFile -> {
@@ -484,11 +492,11 @@ private void discoverTypesInExplicitBeanArchive(URL beansXMLResource, Beans bean
484492
// Exclude filters
485493
excludeFilters(discoveredTypes, beans);
486494
// Add Interceptor classes
487-
addInterceptors(beans.getInterceptors());
495+
enableInterceptors(beans.getInterceptors());
488496
// Add Decorator classes
489-
addDecorators(beans.getDecorators());
497+
enableDecorators(beans.getDecorators());
490498
// Add Alternative classes
491-
addAlternatives(beans.getAlternatives());
499+
enableAlternatives(beans.getAlternatives());
492500
// Trimmed bean archive
493501
if (!trimBeanArchive(discoveredTypes, beans)) {
494502
// Add bean classes from the remaining discovered types
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.geektimes.enterprise.inject.standard.beans;
18+
19+
/**
20+
* The source enumeration for Bean type
21+
*
22+
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
23+
* @since 1.0.0
24+
*/
25+
public enum BeanTypeSource {
26+
27+
/**
28+
* The enabled bean type from explicit bean archives.
29+
*/
30+
ENABLED,
31+
32+
/**
33+
* The discovered bean type from implicit bean archives.
34+
*/
35+
DISCOVERED,
36+
37+
38+
/**
39+
* The synthetic bean type outside of bean archives.
40+
*/
41+
SYNTHETIC;
42+
43+
}

projects/stage-1/middleware-frameworks/my-cdi/src/main/java/org/geektimes/enterprise/inject/standard/beans/StandardBeanManager.java

+22-9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.geektimes.enterprise.inject.standard.producer.ProducerMethodBeanAttributes;
2626
import org.geektimes.enterprise.inject.standard.producer.ProducerMethodFactory;
2727
import org.geektimes.enterprise.inject.util.Annotations;
28+
import org.geektimes.interceptor.InterceptorManager;
2829

2930
import javax.el.ELResolver;
3031
import javax.el.ExpressionFactory;
@@ -56,6 +57,7 @@
5657
import static org.geektimes.enterprise.inject.util.Injections.validateForbiddenAnnotation;
5758
import static org.geektimes.enterprise.inject.util.Parameters.isConstructorParameter;
5859
import static org.geektimes.enterprise.inject.util.Parameters.isMethodParameter;
60+
import static org.geektimes.interceptor.InterceptorManager.getInstance;
5961

6062
/**
6163
* Standard {@link BeanManager}
@@ -79,18 +81,22 @@ public class StandardBeanManager implements BeanManager, Instance<Object> {
7981
*/
8082
public static final String SCAN_IMPLICIT_PROPERTY_NAME = "javax.enterprise.inject.scan.implicit";
8183

82-
private final Map<String, Object> properties;
84+
private ClassLoader classLoader;
8385

84-
private final Map<Class<? extends Extension>, Extension> extensions;
86+
private final Map<String, Object> properties;
8587

8688
private final BeanArchiveManager beanArchiveManager;
8789

8890
private final ObserverMethodManager observerMethodsManager;
8991

90-
private ClassLoader classLoader;
92+
private final InterceptorManager interceptorManager;
93+
94+
private final Map<Class<? extends Extension>, Extension> extensions;
9195

9296
private final Map<String, AnnotatedType<?>> beanTypes;
9397

98+
private final DisposerMethodManager disposerMethodManager;
99+
94100
private final Map<String, AnnotatedType<?>> alternativeTypes;
95101

96102
private final Map<String, AnnotatedType<?>> interceptorTypes;
@@ -101,21 +107,22 @@ public class StandardBeanManager implements BeanManager, Instance<Object> {
101107

102108
private final List<ManagedBean<?>> managedBeans;
103109

104-
private final DisposerMethodManager disposerMethodManager;
105-
106110
public StandardBeanManager() {
107111
this.classLoader = ClassLoaderUtils.getClassLoader(getClass());
112+
113+
this.beanArchiveManager = new BeanArchiveManager(classLoader);
114+
this.observerMethodsManager = new ObserverMethodManager(this);
115+
this.disposerMethodManager = new DisposerMethodManager(this);
116+
this.interceptorManager = getInstance(classLoader);
117+
108118
this.properties = new HashMap<>();
109119
this.extensions = new LinkedHashMap<>();
110-
this.observerMethodsManager = new ObserverMethodManager(this);
111-
this.beanArchiveManager = new BeanArchiveManager(classLoader);
112120
this.beanTypes = new LinkedHashMap<>();
113121
this.alternativeTypes = new LinkedHashMap<>();
114122
this.interceptorTypes = new LinkedHashMap<>();
115123
this.decoratorTypes = new LinkedHashMap<>();
116124
this.syntheticTypes = new LinkedHashMap<>();
117125
this.managedBeans = new LinkedList<>();
118-
this.disposerMethodManager = new DisposerMethodManager(this);
119126
}
120127

121128
@Override
@@ -554,7 +561,7 @@ private void determineManagedBean(AnnotatedType beanType) {
554561
fireProcessInjectionPointEvents(managedBean);
555562
fireProcessInjectionTarget(beanType, managedBean);
556563
fireProcessBeanAttributesEvent(beanType, managedBean);
557-
if(!managedBean.isVetoed()){ // vetoed if ProcessBeanAttributes.veto() method was invoked
564+
if (!managedBean.isVetoed()) { // vetoed if ProcessBeanAttributes.veto() method was invoked
558565
fireProcessBeanEvent(beanType, managedBean);
559566
determineProducerMethods(managedBean);
560567
determineProducerFields(managedBean);
@@ -651,6 +658,12 @@ private void determineInterceptorBeans() {
651658

652659
private void determineInterceptorBean(AnnotatedType<?> interceptorType) {
653660
// TODO
661+
registerInterceptorClass(interceptorType);
662+
}
663+
664+
private void registerInterceptorClass(AnnotatedType<?> interceptorType) {
665+
Class<?> interceptorClass = interceptorType.getJavaClass();
666+
interceptorManager.registerInterceptorClass(interceptorClass);
654667
}
655668

656669
private void determineDecoratorBeans() {

projects/stage-1/middleware-frameworks/my-cdi/src/main/java/org/geektimes/enterprise/inject/standard/event/AfterTypeDiscoveryEvent.java

+3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public AfterTypeDiscoveryEvent(StandardBeanManager standardBeanManager) {
4646
@Override
4747
public List<Class<?>> getAlternatives() {
4848
getCallerExtension();
49+
// FIXME
4950
return beanArchiveManager.getAlternativeClasses();
5051
}
5152

@@ -60,12 +61,14 @@ public List<Class<?>> getAlternatives() {
6061
@Override
6162
public List<Class<?>> getInterceptors() {
6263
getCallerExtension();
64+
// FIXME
6365
return beanArchiveManager.getInterceptorClasses();
6466
}
6567

6668
@Override
6769
public List<Class<?>> getDecorators() {
6870
getCallerExtension();
71+
// FIXME
6972
return beanArchiveManager.getDecoratorClasses();
7073
}
7174

projects/stage-1/middleware-frameworks/my-commons/src/main/java/org/geektimes/commons/util/PriorityComparator.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class PriorityComparator implements Comparator<Object> {
4444

4545
@Override
4646
public int compare(Object o1, Object o2) {
47-
return compare(o1.getClass(), o2.getClass());
47+
return compare(resolveClass(o1), resolveClass(o2));
4848
}
4949

5050
public static int compare(Class<?> type1, Class<?> type2) {
@@ -61,6 +61,10 @@ public static int compare(Class<?> type1, Class<?> type2) {
6161
return Integer.compare(priorityValue1, priorityValue2);
6262
}
6363

64+
private static Class<?> resolveClass(Object object) {
65+
return object instanceof Class ? (Class) object : object.getClass();
66+
}
67+
6468
private static int getValue(Priority priority) {
6569
int value = priority == null ? UNDEFINED_VALUE : priority.value();
6670
return value < 0 ? UNDEFINED_VALUE : value;

projects/stage-1/middleware-frameworks/my-interceptor/src/main/java/org/geektimes/interceptor/DefaultInterceptorManager.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class DefaultInterceptorManager implements InterceptorManager {
6868

6969
public DefaultInterceptorManager() {
7070
this.interceptorBindingTypes = new LinkedHashSet<>();
71-
this.interceptorInfoRepository = new LinkedHashMap<>();
71+
this.interceptorInfoRepository = new TreeMap<>(PriorityComparator.INSTANCE);
7272
this.bindingInterceptors = new LinkedHashMap<>();
7373
this.interceptorsCache = new LinkedHashMap<>();
7474
registerDefaultInterceptorBindingType();
@@ -164,6 +164,12 @@ public boolean isInterceptorBindingType(Class<? extends Annotation> annotationTy
164164
interceptorBindingTypes.contains(annotationType);
165165
}
166166

167+
@Override
168+
public Set<Class<?>> getInterceptorClasses() {
169+
return interceptorInfoRepository.keySet();
170+
}
171+
172+
@Override
167173
public Set<Class<? extends Annotation>> getInterceptorBindingTypes() {
168174
return unmodifiableSet(interceptorBindingTypes);
169175
}

0 commit comments

Comments
 (0)