1 package org.simantics.scl.compiler.module;
3 import java.util.Collection;
4 import java.util.Collections;
6 import java.util.concurrent.ConcurrentHashMap;
8 import org.simantics.scl.compiler.constants.Constant;
9 import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
10 import org.simantics.scl.compiler.elaboration.modules.Documentation;
11 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
12 import org.simantics.scl.compiler.elaboration.modules.TypeClass;
13 import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance;
14 import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor;
15 import org.simantics.scl.compiler.elaboration.relations.SCLEntityType;
16 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
17 import org.simantics.scl.compiler.elaboration.rules.MappingRelation;
18 import org.simantics.scl.compiler.elaboration.rules.TransformationRule;
19 import org.simantics.scl.compiler.errors.CompilationError;
20 import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;
21 import org.simantics.scl.compiler.top.ModuleInitializer;
22 import org.simantics.scl.compiler.types.TCon;
23 import org.simantics.scl.runtime.profiling.BranchPoint;
25 import gnu.trove.map.hash.THashMap;
27 public abstract class LazyModule implements Module {
29 private final String moduleName;
30 private final ConcurrentHashMap<String, SCLValue> values = new ConcurrentHashMap<String, SCLValue>();
31 private final ConcurrentHashMap<String, SCLRelation> relations = new ConcurrentHashMap<String, SCLRelation>();
32 private final ConcurrentHashMap<String, SCLEntityType> entityTypes = new ConcurrentHashMap<String, SCLEntityType>();
34 protected abstract SCLValue createValue(String name);
36 protected SCLRelation createRelation(String name) {
40 protected SCLEntityType createEntityType(String name) {
45 public MappingRelation getMappingRelation(String name) {
50 public TransformationRule getRule(String name) {
54 public LazyModule(String moduleName) {
55 this.moduleName = moduleName;
59 public String getName() {
63 public void findValuesForPrefix(final Collection<SCLValue> values, final String prefix) {
67 public SCLValue getValue(String name) {
68 if(values.containsKey(name))
69 return values.get(name);
71 SCLValue value = createValue(name);
72 values.put(name, value);
78 public List<Constant> getFieldAccessors(String name) {
82 public SCLRelation getRelation(String name) {
83 if(relations.containsKey(name))
84 return relations.get(name);
86 SCLRelation relation = createRelation(name);
87 relations.put(name, relation);
92 public SCLEntityType getEntityType(String name) {
93 if(entityTypes.containsKey(name))
94 return entityTypes.get(name);
96 SCLEntityType entityType = createEntityType(name);
97 entityTypes.put(name, entityType);
103 public TypeClass getTypeClass(String name) {
108 public Collection<TypeClassInstance> getInstances(TCon typeClass) {
109 return Collections.emptyList();
113 public TypeDescriptor getTypeDescriptor(String name) {
118 public Documentation getDocumentation() {
123 public byte[] getClass(String name) {
128 public ModuleInitializer getModuleInitializer() {
133 public EffectConstructor getEffectConstructor(String name) {
138 public Collection<TransformationRule> getRules() {
139 return Collections.emptyList();
143 public THashMap<String, BranchPoint[]> getBranchPoints() {
148 public CompilationError[] getWarnings() {
149 return CompilationError.EMPTY_ARRAY;
153 public CHRRuleset getRuleset(String name) {
158 public String getDeprecation() {