@Override
 public ModuleInternalTransactionalInfo destroyModule(ModuleIdentifier moduleIdentifier) {
   transactionStatus.checkNotCommitted();
   ModuleInternalTransactionalInfo found = modulesHolder.destroyModule(moduleIdentifier);
   moduleIdentifiersToDependencyResolverMap.remove(moduleIdentifier);
   return found;
 }
 /** Get all dependency resolvers, including those that belong to destroyed things? */
 private List<DependencyResolverImpl> getAllSorted() {
   transactionStatus.checkCommitted();
   List<DependencyResolverImpl> sorted =
       new ArrayList<>(moduleIdentifiersToDependencyResolverMap.values());
   for (DependencyResolverImpl dri : sorted) {
     dri.countMaxDependencyDepth(this);
   }
   Collections.sort(sorted);
   return sorted;
 }
 public synchronized DependencyResolverImpl getOrCreate(ModuleIdentifier name) {
   DependencyResolverImpl dependencyResolver = moduleIdentifiersToDependencyResolverMap.get(name);
   if (dependencyResolver == null) {
     transactionStatus.checkNotCommitted();
     dependencyResolver =
         new DependencyResolverImpl(name, transactionStatus, modulesHolder, readableRegistry);
     moduleIdentifiersToDependencyResolverMap.put(name, dependencyResolver);
   }
   return dependencyResolver;
 }
 // protect write access
 @Override
 public void put(ModuleInternalTransactionalInfo moduleInternalTransactionalInfo) {
   transactionStatus.checkNotCommitted();
   modulesHolder.put(moduleInternalTransactionalInfo);
 }