void affectAll(final int className,
                 final @NotNull File sourceFile,
                 final Collection<? super File> affectedFiles,
                 final Collection<? extends File> alreadyCompiledFiles,
                 final @Nullable DependentFilesFilter filter) {
    final IntSet dependants = myClassToClassDependency.get(className);
    if (dependants != null) {
      dependants.forEach(depClass -> {
        final Iterable<File> allSources = classToSourceFileGet(depClass);
        if (allSources == null || Iterators.isEmpty(allSources)) {
          return;
        }

        boolean shouldAffect = false;
        for (File depFile : allSources) {
          if (FileUtil.filesEqual(depFile, sourceFile)) {
            continue;  // skipping self-dependencies
          }
          if (!alreadyCompiledFiles.contains(depFile) && (filter == null || filter.accept(depFile))) {
            // if at least one of the source files associated with the class is affected, all other associated sources should be affected as well
            shouldAffect = true;
            break;
          }
        }

        if (shouldAffect) {
          for (File depFile : allSources) {
            if (!FileUtil.filesEqual(depFile, sourceFile)) {
              affectedFiles.add(depFile);
            }
          }
        }
      });
    }
  }
void affectAll(final int className,
                 final @NotNull File sourceFile,
                 final Collection<? super File> affectedFiles,
                 final Collection<? extends File> alreadyCompiledFiles,
                 final @Nullable DependentFilesFilter filter)