ImmutableProject(Map<String, Object> project) { super(project); final Project prototype = new ProjectImpl(project); this.enabled = prototype.isEnabled(); this.id = prototype.getId(); this.name = prototype.getName(); this.companyName = prototype.getCompanyName(); this.packageName = prototype.getPackageName(); this.packageLocation = prototype.getPackageLocation(); this.configPath = prototype.getConfigPath(); this.dbmses = unmodifiableList(super.children(DBMSES, ImmutableDbms::new).collect(toList())); this.tablesByName = MapStream.fromValues( DocumentDbUtil.traverseOver(this, ImmutableTable.class), table -> DocumentUtil.relativeName(table, Dbms.class, DATABASE_NAME) ).toMap(); }