code: private Map<String, Factory> getVisibleIDMap() {
          synchronized (this) { // or idcache-only lock?
              if (idcache == null) {
                  try {
                      factoryLock.acquireRead();
                      Map<String, Factory> mutableMap = new HashMap<String, Factory>();
                      ListIterator<Factory> lIter = factories.listIterator(factories.size());
                      while (lIter.hasPrevious()) {
                          Factory f = lIter.previous();
                          f.updateVisibleIDs(mutableMap);
                      }
                      this.idcache = Collections.unmodifiableMap(mutableMap);
                  } finally {
                      factoryLock.releaseRead();
                  }
              }
          }
          return idcache;
      }
docs: Return a map from visible ids to factories.