in core/src/main/java/org/apache/sling/testing/mock/osgi/MockBundleContext.java [253:293]
private void handleRefsUpdateOnUnregister(MockServiceRegistration<?> registration) {
// handle DYNAMIC references to this registration
List<ReferenceInfo<?>> affectedDynamicReferences = OsgiServiceUtil.getMatchingDynamicReferences(registeredServices, registration);
for (ReferenceInfo<?> referenceInfo : affectedDynamicReferences) {
Reference reference = referenceInfo.getReference();
if (reference.matchesTargetFilter(registration.getReference())) {
switch (reference.getCardinality()) {
case MANDATORY_UNARY:
case MANDATORY_MULTIPLE:
case OPTIONAL_MULTIPLE:
case OPTIONAL_UNARY:
// it is currently not checked if for a MANDATORY_UNARY or MANDATORY_MULTIPLE reference the last reference is removed
OsgiServiceUtil.invokeUnbindMethod(reference, referenceInfo.getServiceRegistration().getService(), new ServiceInfo(registration));
break;
default:
throw new RuntimeException("Unepxected cardinality: " + reference.getCardinality());
}
}
}
// handle STATIC+GREEDY references to this registration
List<ReferenceInfo<?>> affectedStaticGreedyReferences = OsgiServiceUtil.getMatchingStaticGreedyReferences(registeredServices, registration);
Set<MockServiceRegistration<?>> servicesToRestart = new HashSet<>();
for (ReferenceInfo<?> referenceInfo : affectedStaticGreedyReferences) {
Reference reference = referenceInfo.getReference();
if (reference.matchesTargetFilter(registration.getReference())) {
switch (reference.getCardinality()) {
case MANDATORY_UNARY:
case MANDATORY_MULTIPLE:
case OPTIONAL_MULTIPLE:
case OPTIONAL_UNARY:
servicesToRestart.add(referenceInfo.getServiceRegistration());
break;
default:
throw new RuntimeException("Unepxected cardinality: " + reference.getCardinality());
}
}
}
servicesToRestart.forEach(this::restartService);
}