}
}
// Process composite references declared in this composite
for (Reference reference : composite.getReferences()) {
CompositeReference compositeReference = (CompositeReference)reference;
List<ComponentReference> promotedReferences = getPromotedComponentReferences(compositeReference);
for (ComponentReference promotedReference : promotedReferences) {
reconcileReferenceBindings(compositeReference, promotedReference);
if (compositeReference.getInterfaceContract() != null && // can be null in unit tests
compositeReference.getInterfaceContract().getCallbackInterface() != null) {
SCABinding scaCallbackBinding = promotedReference.getCallbackBinding(SCABinding.class);
if (promotedReference.getCallback() != null) {
promotedReference.getCallback().getBindings().clear();
} else {
promotedReference.setCallback(assemblyFactory.createCallback());
}
if (scaCallbackBinding != null) {
promotedReference.getCallback().getBindings().add(scaCallbackBinding);
}
if (compositeReference.getCallback() != null) {
promotedReference.getCallback().getBindings().addAll(compositeReference.getCallback()
.getBindings());
}
}
}
}
// Process the component references declared on components
// in this composite
for (Component component : composite.getComponents()) {
Implementation implementation = component.getImplementation();
if (implementation instanceof Composite) {
for (ComponentReference componentReference : component.getReferences()) {
Reference implReference = componentReference.getReference();
if (implReference != null && implReference instanceof CompositeReference) {
CompositeReference compositeReference = (CompositeReference)implReference;
List<ComponentReference> promotedReferences =
getPromotedComponentReferences(compositeReference);
for (ComponentReference promotedReference : promotedReferences) {
// Override the configuration of the promoted reference