docs: public void release(Contextual<T> contextual, T instance) {
          synchronized (dependentInstances) {
              for (ContextualInstance<?> dependentInstance : dependentInstances) {
                  // do not destroy contextual again, since it's just being destroyed
                  if (contextual == null || !(dependentInstance.getContextual().equals(contextual))) {
                      destroy(dependentInstance);
                  }
              }
          }
          if (resourceReferences != null) {
              for (ResourceReference<?> reference : resourceReferences) {
                  reference.release();
              }
          }
      }