public void affectDependentModules(DifferentiateContext context, Utils utils, JvmModule fromModule, boolean checkTransitive, @Nullable Predicate<Node<?, ?>> constraint) {
    Iterable<JvmModule> dependent = !checkTransitive? Collections.emptyList() : recurseDepth(
      fromModule,
      mod -> filter(flat(map(context.getGraph().getDependingNodes(mod.getReferenceID()), id -> utils.getNodes(id, JvmModule.class))), m -> m.requiresTransitively(mod.getName())),
      false
    );

    for (JvmModule mod : flat(asIterable(fromModule), dependent)) {
      debug("Affecting modules depending on module ", mod.getName());
      ModuleUsage usage = new ModuleUsage(mod.getReferenceID());
      if (constraint != null) {
        context.affectUsage(usage, constraint);
      }
      else {
        context.affectUsage(usage);
      }
    }
  }
public void affectDependentModules(DifferentiateContext context, Utils utils, JvmModule fromModule, boolean checkTransitive, @Nullable Predicate<Node<?, ?>> constraint)