]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/Namespace.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / environment / Namespace.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/Namespace.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/Namespace.java
new file mode 100644 (file)
index 0000000..dc388a7
--- /dev/null
@@ -0,0 +1,108 @@
+package org.simantics.scl.compiler.environment;
+
+import gnu.trove.procedure.TObjectProcedure;
+
+import java.util.function.Consumer;
+
+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.TypeConstructor;
+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.internal.codegen.effects.EffectConstructor;
+import org.simantics.scl.compiler.types.TCon;
+
+public interface Namespace {
+       /**
+        * Find a sub-namespace with a given name
+        * @param name  name of the namespace
+        * @return  a Namespace instance, or null if not found
+        */
+    Namespace getNamespace(String name);
+    
+    /**
+     * Get an SCLValue for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined value
+     * @return  The return value is an SCLValue provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    SCLValue getValue(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get an SCLRelation for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined relation
+     * @return  The return value is an SCLRelation provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    SCLRelation getRelation(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get an SCLEntityType for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined entity type
+     * @return  The return value is an SCLEntityType provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    SCLEntityType getEntityType(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get a TypeConstructor for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined entity type
+     * @return  The return value is a TypeConstructor provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    TypeConstructor getTypeConstructor(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get an EffectConstructor for a given name. The same instance is returned on each call.
+     * @param name  an effect name
+     * @return  The return value is an EffectConstructor provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    EffectConstructor getEffectConstructor(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get a TypeClass for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined entity type
+     * @return  The return value is a TypeClass provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    TypeClass getTypeClass(String name) throws AmbiguousNameException;
+    
+    /**
+     * Get a TypeAlias for a given name. The same instance is returned on each call.
+     * @param name  the name of a defined entity type
+     * @return  The return value is a TypeAlias provided by any source included in the namespace,
+     *          or null if the name is not found.
+     * @exception  AmbiguousNameException  if the name matches with multiple imported modules. 
+     */
+    TypeAlias getTypeAlias(String name) throws AmbiguousNameException;
+    
+    TransformationRule getRule(String name) throws AmbiguousNameException;
+    MappingRelation getMappingRelation(String name) throws AmbiguousNameException;
+
+    /**
+     * Find all values that share a common prefix and call a procedure for them.
+     * @param prefix  A name prefix
+     * @param filter  A filter that restricts the set of found values
+     * @param proc    A procedure that is called for all found values
+     */
+    void findValuesForPrefix(String prefix, NamespaceFilter filter, TObjectProcedure<SCLValue> proc);
+    
+    /**
+     * Find all types that share a common prefix and call a consumer for them.
+     * @param prefix    A name prefix
+     * @param filter    A filter that restricts the set of found values
+     * @param consumer  A procedure that is called for all found values
+     */
+    void findTypesForPrefix(String prefix, NamespaceFilter filter, Consumer<TCon> consumer);
+}