in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/RuntimeExtension.java [151:218]
<X> void processBean(@Observes ProcessBean<X> pb) {
final Class<X> declaringClass = Annotates.declaringClass(pb);
String className = declaringClass.getName();
OSGiBean osgiBean = _containerState.beansModel().getOSGiBean(className);
if (osgiBean == null) {
return;
}
final Annotated annotated = pb.getAnnotated();
try {
List<String> serviceTypes = Annotates.serviceClassNames(annotated);
Map<String, Object> componentProperties = Annotates.componentProperties(annotated);
ServiceScope serviceScope = Annotates.serviceScope(annotated);
if (annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.SingleComponent.class) ||
annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.FactoryComponent.class)) {
ActivationTemplateDTO activationTemplate = osgiBean.getComponent().activations.get(0);
activationTemplate.scope = serviceScope;
activationTemplate.serviceClasses = serviceTypes;
osgiBean.getComponent().properties = componentProperties;
}
else if (annotated.isAnnotationPresent(org.osgi.service.cdi.annotations.ComponentScoped.class)) {
// Explicitly ignore this case
}
else if (!serviceTypes.isEmpty()) {
AnnotatedMember<?> producer = null;
if (pb instanceof ProcessProducerField) {
producer = ((ProcessProducerField<?, ?>) pb).getAnnotatedProducerField();
}
else if (pb instanceof ProcessProducerMethod) {
producer = ((ProcessProducerMethod<?, ?>) pb).getAnnotatedProducerMethod();
}
ExtendedActivationTemplateDTO activationTemplate = null;
for (ActivationTemplateDTO at : _containerTemplate.activations) {
ExtendedActivationTemplateDTO extended = (ExtendedActivationTemplateDTO)at;
if (extended.declaringClass.equals(declaringClass) &&
equals(extended.producer, producer)) {
activationTemplate = extended;
break;
}
}
if (activationTemplate == null) {
activationTemplate = new ExtendedActivationTemplateDTO();
activationTemplate.cdiScope = pb.getBean().getScope();
activationTemplate.declaringClass = declaringClass;
activationTemplate.producer = producer;
_containerTemplate.activations.add(activationTemplate);
}
activationTemplate.properties = componentProperties;
activationTemplate.scope = serviceScope;
activationTemplate.serviceClasses = serviceTypes;
}
}
catch (Exception e) {
pb.addDefinitionError(e);
}
}