docs: public List<CmsResource> getLockedResources(CmsDbContext dbc, CmsResource resource, CmsLockFilter filter)
      throws CmsException {
  
          List<CmsResource> lockedResources = new ArrayList<CmsResource>();
          Iterator<CmsLock> itLocks = OpenCms.getMemoryMonitor().getAllCachedLocks().iterator();
          while (itLocks.hasNext()) {
              CmsLock lock = itLocks.next();
              CmsResource lockedResource;
              boolean matchesFilter = filter.match(resource.getRootPath(), lock);
              if (!matchesFilter && !filter.isSharedExclusive()) {
                  // we don't need to read the resource if the filter didn't match and we don't need to look at the siblings
                  continue;
              }
              try {
                  lockedResource = m_driverManager.readResource(dbc, lock.getResourceName(), CmsResourceFilter.ALL);
              } catch (CmsVfsResourceNotFoundException e) {
                  OpenCms.getMemoryMonitor().uncacheLock(lock.getResourceName());
                  continue;
              }
              if (filter.isSharedExclusive() && (lockedResource.getSiblingCount() > 1)) {
                  Iterator<CmsResource> itSiblings = internalReadSiblings(dbc, lockedResource).iterator();
                  while (itSiblings.hasNext()) {
                      CmsResource sibling = itSiblings.next();
                      CmsLock siblingLock = internalSiblingLock(lock, sibling.getRootPath());
                      if (filter.match(resource.getRootPath(), siblingLock)) {
                          lockedResources.add(sibling);
                      }
                  }
              }
              if (matchesFilter) {
                  lockedResources.add(lockedResource);
              }
          }
          Collections.sort(lockedResources, I_CmsResource.COMPARE_ROOT_PATH);
          return lockedResources;
      }