void perform(final int modName) {
          final IntSet depNames = myClassToClassDependency.get(modName);
          if (depNames != null && !depNames.isEmpty()) {
            final IntSet next = new IntOpenHashSet();
            final UsageRepr.Usage moduleUsage = UsageRepr.createModuleUsage(myContext, modName);
            state.myAffectedUsages.add(moduleUsage);
            final UsageConstraint prevConstraint = state.myUsageConstraints.put(moduleUsage, constraint == null? UsageConstraint.ANY : constraint);
            if (prevConstraint != null) {
              state.myUsageConstraints.put(moduleUsage, prevConstraint.or(constraint));
            }
            depNames.forEach(depName -> {
              if (visited.add(depName)) {
                for (ModuleRepr depRepr : reprsByName(depName, ModuleRepr.class)) {
                  state.myDependants.add(depName);
                  if (checkTransitive && depRepr.requiresTransitevely(modName)) {
                    next.add(depName);
                    break;
                  }
                }
              }
            });
            next.forEach(this::perform);
          }
        }
void perform(final int modName)