@@ -0,0 +1,1687 @@
+/*%0A * Bach - Java Shell Builder%0A * Copyright (C) 2020 Christian Stein%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *     https://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0A%0Apackage de.sormuras.bach.project;%0A%0Aimport java.util.List;%0Aimport java.util.Map;%0Aimport java.util.Optional;%0Aimport java.util.TreeMap;%0Aimport java.util.stream.Collectors;%0A%0A/** A set of module units and tool arguments. */%0Apublic final class MainSources %7B%0A%0A  public static MainSources of() %7B%0A    return new MainSources(Map.of());%0A  %7D%0A%0A  private final Map%3CString, ModuleSource%3E units;%0A%0A  public MainSources(Map%3CString, ModuleSource%3E units) %7B%0A    this.units = Map.copyOf(units);%0A  %7D%0A%0A  public Map%3CString, ModuleSource%3E units() %7B%0A    return units;%0A  %7D%0A%0A  public List%3CString%3E unitNames() %7B%0A    return units.keySet().stream().sorted().collect(Collectors.toUnmodifiableList());%0A  %7D%0A%0A  public Optional%3CModuleSource%3E unit(String name) %7B%0A    return Optional.ofNullable(units.get(name));%0A  %7D%0A%0A  public MainSources with(ModuleSource unit, ModuleSource... more) %7B%0A    var mergedUnits = new TreeMap%3C%3E(units);%0A    mergedUnits.put(unit.module().name(), unit);%0A    for (var m : more) mergedUnits.put(m.module().name(), unit);%0A    return new MainSources(mergedUnits);%0A  %7D%0A%7D%0A

Introduce main sources