public void report() {
    boolean moduleReport = true;

    System.out.println("Project \"" + myRoot + "\" report:");

    if (myHistory == null) {
      System.out.println("   no project history found");
    }

    if (moduleReport) {
      for (ModuleWrapper m : myModules.values()) {
        System.out.println(
            "   module "
                + m.getName()
                + " "
                + (m.isOutdated(false, myHistory) ? "is outdated" : "is up-to-date"));
        System.out.println(
            "   module "
                + m.getName()
                + " tests "
                + (m.isOutdated(true, myHistory) ? "are outdated" : "are up-to-date"));
      }
    }
  }
  private ProjectWrapper(final BufferedReader r, final Set<String> affected) {
    affectedFiles = affected;
    myProject = null;
    myProjectBuilder = null;
    myHistory = null;

    myRoot = RW.readStringAttribute(r, "Root:");
    myProjectSnapshot =
        myHomeDir
            + File.separator
            + myJPSDir
            + File.separator
            + myRoot.replace(File.separatorChar, myFileSeparatorReplacement);

    RW.readTag(r, "Libraries:");
    final Set<LibraryWrapper> libs =
        (Set<LibraryWrapper>) RW.readMany(r, myLibraryWrapperReader, new HashSet<LibraryWrapper>());

    for (LibraryWrapper l : libs) {
      myLibraries.put(l.getName(), l);
    }

    RW.readTag(r, "Modules:");
    final Set<ModuleWrapper> mods =
        (Set<ModuleWrapper>) RW.readMany(r, myModuleWrapperReader, new HashSet<ModuleWrapper>());

    for (ModuleWrapper m : mods) {
      myModules.put(m.getName(), m);
    }

    RW.readMany(r, RW.myStringReader, affectedFiles);

    try {
      dependencyMapping = new Mappings(getMapDir());
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    backendCallback = dependencyMapping.getCallback();
  }
 public WeakClasspathItemWrapper(final ModuleWrapper m) {
   myType = "Module";
   myName = m.getName();
 }