X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fmodule%2FConcreteModule.java;h=73311e99ab9ab4a17f087d1f215b15de89286929;hb=bf5f7cda1b9b64484cc6e53499e38d6785744aec;hp=8edd9f7019b3f1d01992a2471414b900d21fcd3f;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java index 8edd9f701..73311e99a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/ConcreteModule.java @@ -9,17 +9,18 @@ import java.util.function.Consumer; import org.simantics.scl.compiler.common.names.Name; 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.TypeAlias; import org.simantics.scl.compiler.elaboration.modules.TypeClass; import org.simantics.scl.compiler.elaboration.modules.TypeClassInstance; -import org.simantics.scl.compiler.elaboration.modules.TypeConstructor; +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.environment.filter.NamespaceFilter; +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; @@ -31,20 +32,24 @@ import gnu.trove.procedure.TObjectProcedure; public class ConcreteModule implements Module { String moduleName; - THashMap typeConstructors = new THashMap(); - THashMap typeAliases = new THashMap(); + String defaultLocalName; + THashMap typeDescriptors = new THashMap(); THashMap effectConstructors = new THashMap(); THashMap typeClasses = new THashMap(); THashMap> typeClassInstances = new THashMap>(); THashMap values = new THashMap(); - THashMap relations = new THashMap(); - THashMap entityTypes = new THashMap(); - THashMap rules = new THashMap(); - THashMap mappingRelations = new THashMap(); + THashMap> fieldAccessors = new THashMap>(); + THashMap relations = new THashMap(2); + THashMap entityTypes = new THashMap(2); + THashMap rules = new THashMap(2); + THashMap mappingRelations = new THashMap(2); + THashMap rulesets = new THashMap(2); ArrayList dependencies = new ArrayList(); THashMap branchPoints; - + CompilationError[] warnings = CompilationError.EMPTY_ARRAY; + Map classes = Collections.emptyMap(); + ClassLoader parentClassLoader; ModuleInitializer moduleInitializer; protected Documentation documentation; @@ -53,12 +58,17 @@ public class ConcreteModule implements Module { this.moduleName = moduleName; } - public boolean addTypeConstructor(String name, TypeConstructor typeConstructor) { - return typeConstructors.put(name, typeConstructor) != null; + @Override + public String getDefaultLocalName() { + return defaultLocalName; } - - public boolean addTypeAlias(String name, TypeAlias alias) { - return typeAliases.put(name, alias) != null; + + public void setDefaultLocalName(String defaultLocalName) { + this.defaultLocalName = defaultLocalName; + } + + public boolean addTypeDescriptor(String name, TypeDescriptor typeConstructor) { + return typeDescriptors.put(name, typeConstructor) != null; } public boolean addEffectConstructor(String name, EffectConstructor effectConstructor) { @@ -99,6 +109,11 @@ public class ConcreteModule implements Module { addValue(value); return value; } + + @Override + public List getFieldAccessors(String name) { + return fieldAccessors.get(name); + } public void addRelation(String name, SCLRelation relation) { relations.put(name, relation); @@ -169,8 +184,8 @@ public class ConcreteModule implements Module { } @Override - public TypeConstructor getTypeConstructor(String name) { - return typeConstructors.get(name); + public TypeDescriptor getTypeDescriptor(String name) { + return typeDescriptors.get(name); } @Override @@ -178,6 +193,11 @@ public class ConcreteModule implements Module { return effectConstructors.get(name); } + @Override + public CHRRuleset getRuleset(String name) { + return rulesets.get(name); + } + public Collection getTypeClasses() { return typeClasses.values(); } @@ -199,11 +219,6 @@ public class ConcreteModule implements Module { return documentation; } - @Override - public TypeAlias getTypeAlias(String name) { - return typeAliases.get(name); - } - public void setClasses(Map classes) { this.classes = classes; } @@ -260,16 +275,11 @@ public class ConcreteModule implements Module { @Override public void findTypesForPrefix(String prefix, NamespaceFilter filter, Consumer consumer) { - typeConstructors.values().forEach(type -> { + typeDescriptors.values().forEach(type -> { TCon tcon = type.name; if (tcon.name.toLowerCase().startsWith(prefix.toLowerCase()) && filter.isValueIncluded(tcon.name)) consumer.accept(tcon); }); - typeAliases.values().forEach(type -> { - TCon tcon = type.getCon(); - if (tcon.name.toLowerCase().startsWith(prefix.toLowerCase()) && filter.isValueIncluded(tcon.name)) - consumer.accept(tcon); - }); } public void setBranchPoints(THashMap branchPoints) { @@ -283,6 +293,37 @@ public class ConcreteModule implements Module { @Override public void dispose() { - + } + + public void setWarnings(CompilationError[] warnings) { + this.warnings = warnings; + } + + public CompilationError[] getWarnings() { + return warnings; + } + + @Override + public ClassLoader getParentClassLoader() { + return parentClassLoader; + } + + public void setParentClassLoader(ClassLoader parentClassLoader) { + if(parentClassLoader == null) + throw new NullPointerException(); + this.parentClassLoader = parentClassLoader; + } + + public void addFieldAccessor(String name, Constant accessor) { + List list = fieldAccessors.get(name); + if(list == null) { + list = new ArrayList(2); + fieldAccessors.put(name, list); + } + list.add(accessor); + } + + public void addRuleset(String name, CHRRuleset ruleset) { + rulesets.put(name, ruleset); } }