/**
  * Generator output can create opportunities for further generator execution, so runGenerators()
  * is repeated to a fixed point. But previously handled generator/reboundType pairs should be
  * ignored.
  */
 private void removePreviouslyReboundCombinations(
     final String generatorName, Set<String> newReboundTypeNames) {
   newReboundTypeNames.removeAll(
       Sets.newHashSet(
           Sets.filter(
               newReboundTypeNames,
               new Predicate<String>() {
                 @Override
                 public boolean apply(@Nullable String newReboundTypeName) {
                   return generatorNamesByPreviouslyReboundTypeName.containsEntry(
                       newReboundTypeName, generatorName);
                 }
               })));
 }