code: public final ConfigurationModuleBuilder merge(final ConfigurationModule d) {
      if (d == null) {
        throw new NullPointerException("If merge() was passed a static final field that is initialized to non-null, " +
            "then this is almost certainly caused by a circular class dependency.");
      }
      try {
        d.assertStaticClean();
      } catch (final ClassHierarchyException e) {
        throw new ClassHierarchyException(ReflectionUtilities.getFullName(getClass()) +
            ": detected attempt to merge with ConfigurationModule that has had set() called on it", e);
      }
      final ConfigurationModuleBuilder c = deepCopy();
      final ConfigurationModuleBuilder builder = d.getBuilder();
      try {
        c.b.addConfiguration(builder.b.build());
      } catch (final BindException e) {
        throw new ClassHierarchyException(e);
      }
      c.reqDecl.addAll(builder.reqDecl);
      c.optDecl.addAll(builder.optDecl);
      c.reqUsed.addAll(builder.reqUsed);
      c.optUsed.addAll(builder.optUsed);
      c.setOpts.addAll(builder.setOpts);
      c.map.putAll(builder.map);
      c.freeImpls.putAll(builder.freeImpls);
      c.freeParams.putAll(builder.freeParams);
      c.lateBindClazz.putAll(builder.lateBindClazz);
  
      return c;
    }
docs: TODO: It would be nice if this incorporated d by reference so that static analysis / documentation tools
  could document the dependency between c and d.
  
  @param d a configuration module to merge
  @return the merged configuration module builder