code: private static void intersection(final Set<String> orig, final Set<String> add) {
          Iterator<String> it = orig.iterator();
          while (it.hasNext()) {
              if (!add.contains(it.next())) {
                  it.remove();
              }
          }
      }
docs: performs a typical set intersection between what types of possible superclasses/interfaces has been seen before, for this collection, and what is now
  seen.
  
  @param orig
  the existing set of superclasses used for this collection
  @param add
  the currently added item