public ImmutableProjectReactor(ProjectDefinition root) {
   if (root.getParent() != null) {
     throw new IllegalArgumentException("Not a root project: " + root);
   }
   this.root = root;
   collectProjects(root);
 }