@Override
      public DirtyFilesHolderBuilder<R, T> markDirtyFile(T target, File file) throws IOException {
        final ProjectDescriptor pd = context.getProjectDescriptor();
        final R rd = pd.getBuildRootIndex().findParentDescriptor(file, Collections.singleton(target.getTargetType()), context);
        if (rd != null) {
          if (pd.fsState.markDirtyIfNotDeleted(context, round, file, rd, pd.getProjectStamps().getStampStorage()) || pd.fsState.isMarkedForRecompilation(context, round, rd, file)) {
            Map<R, Set<File>> targetFiles = dirtyFiles.get(target);
            if (targetFiles == null) {
              targetFiles = new HashMap<>();
              dirtyFiles.put(target, targetFiles);
            }
            Set<File> rootFiles = targetFiles.get(rd);
            if (rootFiles == null) {
              rootFiles = FileCollectionFactory.createCanonicalFileSet();
              targetFiles.put(rd, rootFiles);
            }
            rootFiles.add(file);
          }
        }
        return this;
      }
@Override
      public DirtyFilesHolderBuilder<R, T> markDirtyFile(T target, File file)