X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fenvironment%2FNamespaceImpl.java;h=0dd144053aa584d66c54c10175d29c1927a36e54;hp=6dac77acf029d54aa3dc9f641de6bd5c0fc006af;hb=3216affb4ed0e73a5601be223638f4f1a41fb26a;hpb=593a8f75d9dbc363234002dc500c346afbeba040 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/NamespaceImpl.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/NamespaceImpl.java index 6dac77acf..0dd144053 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/NamespaceImpl.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/environment/NamespaceImpl.java @@ -1,8 +1,10 @@ package org.simantics.scl.compiler.environment; import java.util.ArrayList; +import java.util.Collection; import java.util.function.Consumer; +import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; import org.simantics.scl.compiler.elaboration.modules.SCLValue; import org.simantics.scl.compiler.elaboration.modules.TypeClass; import org.simantics.scl.compiler.elaboration.modules.TypeDescriptor; @@ -44,6 +46,11 @@ public class NamespaceImpl implements Namespace { public Namespace getNamespace(String name) { return namespaceMap.get(name); } + + @Override + public Collection getNamespaces() { + return namespaceMap.keySet(); + } @Override public SCLValue getValue(String name) throws AmbiguousNameException { @@ -73,7 +80,7 @@ public class NamespaceImpl implements Namespace { throw new AmbiguousNameException(conflictingModules, name); return result; } - + @Override public SCLRelation getRelation(String name) throws AmbiguousNameException { SCLRelation result = null, temp; @@ -266,6 +273,33 @@ public class NamespaceImpl implements Namespace { return result; } + @Override + public CHRRuleset getRuleset(String name) throws AmbiguousNameException { + CHRRuleset result = null, temp; + Module resultModule = null; + ArrayList conflictingModules = null; + for(ModuleImport moduleImport : moduleImports) { + Module module = moduleImport.module; + temp = module.getRuleset(name); + if(temp != null) { + if(result != null) { + if(conflictingModules == null) { + conflictingModules = new ArrayList(2); + conflictingModules.add(resultModule.getName()); + } + conflictingModules.add(module.getName()); + } + else { + result = temp; + resultModule = module; + } + } + } + if(conflictingModules != null) + throw new AmbiguousNameException(conflictingModules, name); + return result; + } + @Override public void findValuesForPrefix(String prefix, NamespaceFilter filter, TObjectProcedure proc) { for(ModuleImport moduleImport : moduleImports)