@Override
  public void changed(@NotNull VersionedStorageChange event) {
    boolean needFSRescan =
      processEntityChanges(event, SourceRootEntity.class, ChangeProcessor.anyChange(true, false)) ||
      processEntityChanges(event, ModuleEntity.class, Predicates.alwaysTrue(), 
                           (before, after) -> before.getDependencies().equals(after.getDependencies()),
                           ChangeProcessor.anyChange(true, false)) ||
      processEntityChanges(event, ContentRootEntity.class, Predicates.alwaysTrue(),
                           (before, after) -> before.getExcludedPatterns().equals(after.getExcludedPatterns()),
                           ChangeProcessor.anyChange(true, false)) ||
      processEntityChanges(event, ExcludeUrlEntity.class, 
                           entity -> RootsKt.getContentRoot(entity) != null,//skip changes in excluded roots of libraries
                           (before, after) -> before.getUrl().equals(after.getUrl()), 
                           ChangeProcessor.anyChange(true, false)) ||
      processEntityChanges(event, JavaModuleSettingsEntity.class, ChangeProcessor.anyChange(true, false));

    if (needFSRescan) {
      BuildManager.getInstance().clearState(myProject);
    }
    else if (((VersionedStorageChangeInternal)event).getAllChanges().iterator().hasNext()) {
      BuildManager.getInstance().cancelPreloadedBuilds(myProject);
    }
  }
@Override
  public void changed(@NotNull VersionedStorageChange event)