code: public Iterator<String> getKeys() throws ConcurrentModificationException
      {
          Set<String> keys = new LinkedHashSet<String>();
          for (Iterator<String> it = overrideProperties.getKeys(); it.hasNext();) {
              keys.add(it.next());
          }
          for (Configuration config : configList)
          {
              for (Iterator<String> it = config.getKeys(); it.hasNext();)
              {
                  try {
                      keys.add(it.next());
                  } catch (ConcurrentModificationException e) {
                      logger.error("unexpected exception when iterating the keys for configuration " + config 
                              + " with name " + getNameForConfiguration(config));
                      throw e;
                  }
              }
          }
  
          return keys.iterator();
      }
docs: Get all the keys contained by sub configurations.
  
  @throws ConcurrentModificationException if concurrent modification happens on any sub configuration
  when it is iterated to get all the keys