package org.simantics.scl.compiler.module; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import org.simantics.scl.compiler.constants.Constant; import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; import org.simantics.scl.compiler.elaboration.modules.Documentation; import org.simantics.scl.compiler.elaboration.modules.SCLValue; import org.simantics.scl.compiler.elaboration.modules.TypeClass; import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance; import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor; import org.simantics.scl.compiler.elaboration.relations.SCLEntityType; import org.simantics.scl.compiler.elaboration.relations.SCLRelation; import org.simantics.scl.compiler.elaboration.rules.MappingRelation; import org.simantics.scl.compiler.elaboration.rules.TransformationRule; import org.simantics.scl.compiler.errors.CompilationError; import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor; import org.simantics.scl.compiler.top.ModuleInitializer; import org.simantics.scl.compiler.types.TCon; import org.simantics.scl.runtime.profiling.BranchPoint; import gnu.trove.map.hash.THashMap; public abstract class LazyModule implements Module { private final String moduleName; private final ConcurrentHashMap values = new ConcurrentHashMap(); private final ConcurrentHashMap relations = new ConcurrentHashMap(); private final ConcurrentHashMap entityTypes = new ConcurrentHashMap(); protected abstract SCLValue createValue(String name); protected SCLRelation createRelation(String name) { return null; } protected SCLEntityType createEntityType(String name) { return null; } @Override public MappingRelation getMappingRelation(String name) { return null; } @Override public TransformationRule getRule(String name) { return null; } public LazyModule(String moduleName) { this.moduleName = moduleName; } @Override public String getName() { return moduleName; } public void findValuesForPrefix(final Collection values, final String prefix) { } private final Function createValue = this::createValue; @Override public SCLValue getValue(String name) { return values.computeIfAbsent(name, createValue); } @Override public List getFieldAccessors(String name) { return null; } private final Function createRelation = this::createRelation; public SCLRelation getRelation(String name) { return relations.computeIfAbsent(name, createRelation); } private final Function createEntityType = this::createEntityType; public SCLEntityType getEntityType(String name) { return entityTypes.computeIfAbsent(name, createEntityType); } @Override public TypeClass getTypeClass(String name) { return null; } @Override public Collection getInstances(TCon typeClass) { return Collections.emptyList(); } @Override public TypeDescriptor getTypeDescriptor(String name) { return null; } @Override public Documentation getDocumentation() { return null; } @Override public byte[] getClass(String name) { return null; } @Override public ModuleInitializer getModuleInitializer() { return null; } @Override public EffectConstructor getEffectConstructor(String name) { return null; } @Override public Collection getRules() { return Collections.emptyList(); } @Override public THashMap getBranchPoints() { return null; } @Override public CompilationError[] getWarnings() { return CompilationError.EMPTY_ARRAY; } @Override public CHRRuleset getRuleset(String name) { return null; } @Override public String getDeprecation() { return null; } }