]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/Module.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / module / Module.java
1 package org.simantics.scl.compiler.module;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6 import java.util.function.Consumer;
7
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.environment.filter.AcceptAllNamespaceFilter;
20 import org.simantics.scl.compiler.environment.filter.NamespaceFilter;
21 import org.simantics.scl.compiler.errors.CompilationError;
22 import org.simantics.scl.compiler.internal.codegen.effects.EffectConstructor;
23 import org.simantics.scl.compiler.module.debug.ModuleDebugInfo;
24 import org.simantics.scl.compiler.top.ModuleInitializer;
25 import org.simantics.scl.compiler.types.TCon;
26 import org.simantics.scl.runtime.profiling.BranchPoint;
27
28 import gnu.trove.map.hash.THashMap;
29 import gnu.trove.procedure.TObjectProcedure;
30
31 public interface Module {
32     String getName();
33     String getDefaultLocalName();
34     
35     SCLValue getValue(String name);
36     default List<String> getValueNames() {
37         ArrayList<String> valueNames = new ArrayList<String>();
38         findValuesForPrefix("", AcceptAllNamespaceFilter.INSTANCE, value -> {
39             valueNames.add(value.getName().name);
40         });
41         return valueNames;
42     }
43     List<Constant> getFieldAccessors(String name);
44     SCLRelation getRelation(String name);
45     SCLEntityType getEntityType(String name);
46     
47     TypeDescriptor getTypeDescriptor(String name);
48     
49     EffectConstructor getEffectConstructor(String name);
50     TypeClass getTypeClass(String name);
51     Collection<TypeClassInstance> getInstances(TCon typeClass);
52     MappingRelation getMappingRelation(String name);
53     TransformationRule getRule(String name);
54     CHRRuleset getRuleset(String name);
55     Collection<TransformationRule> getRules();
56     
57     void findValuesForPrefix(String prefix, NamespaceFilter filter, TObjectProcedure<SCLValue> proc);
58     void findValuesForPrefix(String prefix, NamespaceFilter filter, Consumer<SCLValue> consumer);
59     
60     void findTypesForPrefix(String prefix, NamespaceFilter instance, Consumer<TCon> consumer);
61     
62     List<ImportDeclaration> getDependencies();
63     Documentation getDocumentation();
64     
65     byte[] getClass(String name);
66     ModuleInitializer getModuleInitializer();
67
68     THashMap<String, BranchPoint[]> getBranchPoints();
69     void dispose();
70
71     CompilationError[] getWarnings();
72     ClassLoader getParentClassLoader();
73     String getDeprecation();
74     
75     /**
76      * May return null, if there is no debug info.
77      */
78     default ModuleDebugInfo getModuleDebugInfo() {
79         return null;
80     }
81 }