1 package org.simantics.scl.compiler.source.repository;
3 import java.util.ArrayList;
4 import java.util.Collection;
6 import org.simantics.scl.compiler.module.repository.UpdateListener;
7 import org.simantics.scl.compiler.source.ModuleSource;
9 import gnu.trove.procedure.TObjectProcedure;
11 public class CompositeModuleSourceRepository implements ModuleSourceRepository {
12 public final ModuleSourceRepository[] children;
14 public CompositeModuleSourceRepository(ModuleSourceRepository ... children) {
15 this.children = children;
19 public ModuleSource getModuleSource(String moduleName,
20 UpdateListener listener) {
21 ModuleSource result = null;
22 for(ModuleSourceRepository sourceRepository : children) {
23 ModuleSource source = sourceRepository.getModuleSource(moduleName, listener);
26 double resultPriority = result.getPriority();
27 double sourcePriority = source.getPriority();
28 if(resultPriority > sourcePriority)
30 if(resultPriority == sourcePriority)
31 throw new RuntimeException("Module " + moduleName + " has two sources " + result + ", " +
32 source + " with the same priority.");
41 public String getDocumentation(String documentationName) {
42 for(ModuleSourceRepository sourceRepository : children) {
43 String documentation = sourceRepository.getDocumentation(documentationName);
44 if(documentation != null)
51 public void forAllModules(TObjectProcedure<String> procedure) {
52 for(ModuleSourceRepository sourceRepository : children)
53 sourceRepository.forAllModules(procedure);
57 public Collection<String> getModuleNames() {
58 ArrayList<String> result = new ArrayList<>();
59 forAllModules((String name) -> {
67 public void forAllDocumentations(TObjectProcedure<String> procedure) {
68 for(ModuleSourceRepository sourceRepository : children)
69 sourceRepository.forAllDocumentations(procedure);
73 public Collection<String> getDocumentationNames() {
74 ArrayList<String> result = new ArrayList<>();
75 forAllDocumentations((String name) -> {
83 public void checkUpdates() {
84 for (ModuleSourceRepository child : children)
90 for (ModuleSourceRepository child : children)