1 package org.simantics.scl.compiler.module;
3 import java.util.Collection;
4 import java.util.Collections;
7 import org.simantics.scl.compiler.constants.Constant;
8 import org.simantics.scl.compiler.elaboration.modules.Documentation;
9 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
10 import org.simantics.scl.compiler.elaboration.modules.TypeClass;
11 import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance;
12 import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;
13 import org.simantics.scl.compiler.elaboration.relations.SCLEntityType;
14 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
15 import org.simantics.scl.compiler.elaboration.rules.MappingRelation;
16 import org.simantics.scl.compiler.elaboration.rules.TransformationRule;
17 import org.simantics.scl.compiler.errors.CompilationError;
18 import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;
19 import org.simantics.scl.compiler.top.ModuleInitializer;
20 import org.simantics.scl.compiler.types.TCon;
21 import org.simantics.scl.runtime.profiling.BranchPoint;
23 import gnu.trove.map.hash.THashMap;
25 public abstract class LazyModule implements Module {
28 private THashMap<String, SCLValue> values = new THashMap<String, SCLValue>();
29 private THashMap<String, SCLRelation> relations = new THashMap<String, SCLRelation>();
30 private THashMap<String, SCLEntityType> entityTypes = new THashMap<String, SCLEntityType>();
32 protected abstract SCLValue createValue(String name);
34 protected SCLRelation createRelation(String name) {
38 protected SCLEntityType createEntityType(String name) {
43 public MappingRelation getMappingRelation(String name) {
48 public TransformationRule getRule(String name) {
52 public LazyModule(String moduleName) {
53 this.moduleName = moduleName;
57 public String getName() {
61 public void findValuesForPrefix(final Collection<SCLValue> values, final String prefix) {
65 public SCLValue getValue(String name) {
66 if(values.containsKey(name))
67 return values.get(name);
69 SCLValue value = createValue(name);
70 values.put(name, value);
76 public List<Constant> getFieldAccessors(String name) {
80 public SCLRelation getRelation(String name) {
81 if(relations.containsKey(name))
82 return relations.get(name);
84 SCLRelation relation = createRelation(name);
85 relations.put(name, relation);
90 public SCLEntityType getEntityType(String name) {
91 if(entityTypes.containsKey(name))
92 return entityTypes.get(name);
94 SCLEntityType entityType = createEntityType(name);
95 entityTypes.put(name, entityType);
101 public TypeClass getTypeClass(String name) {
106 public Collection<TypeClassInstance> getInstances(TCon typeClass) {
107 return Collections.emptyList();
111 public TypeDescriptor getTypeDescriptor(String name) {
116 public Documentation getDocumentation() {
121 public byte[] getClass(String name) {
126 public ModuleInitializer getModuleInitializer() {
131 public EffectConstructor getEffectConstructor(String name) {
136 public Collection<TransformationRule> getRules() {
137 return Collections.emptyList();
141 public THashMap<String, BranchPoint[]> getBranchPoints() {
146 public CompilationError[] getWarnings() {
147 return CompilationError.EMPTY_ARRAY;