summaryrefslogtreecommitdiffstats
path: root/rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend')
-rw-r--r--rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend42
1 files changed, 42 insertions, 0 deletions
diff --git a/rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend b/rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend
new file mode 100644
index 0000000..3dad349
--- /dev/null
+++ b/rba.tool.editor/src/rba/tool/editor/scoping/RBAModelImportedNamespaceAwareLocalScopeProvider.xtend
@@ -0,0 +1,42 @@
+package rba.tool.editor.scoping
+
+import java.util.Iterator
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.emf.ecore.EReference
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.emf.ecore.util.EcoreUtil
+import org.eclipse.xtext.resource.IEObjectDescription
+import org.eclipse.xtext.scoping.Scopes
+import org.eclipse.xtext.scoping.impl.ImportedNamespaceAwareLocalScopeProvider
+import org.eclipse.xtext.scoping.impl.MultimapBasedSelectable
+import org.eclipse.xtext.xbase.lib.Functions.Function1
+import rba.core.RBACorePackage
+import rba.core.Variable
+
+class RBAModelImportedNamespaceAwareLocalScopeProvider extends ImportedNamespaceAwareLocalScopeProvider {
+
+ private Function1<? super IEObjectDescription, Boolean> variableFilter = [ description |
+ description.EClass !== RBACorePackage.Literals.VARIABLE
+ ];
+
+ override protected getResourceScope(Resource res, EReference reference) {
+ val context = res.getContents().get(0);
+ var globalScope = getGlobalScope(res, reference, variableFilter);
+ val normalizers = getImplicitImports(isIgnoreCase(reference));
+ if(!normalizers.isEmpty()) {
+ globalScope = createImportScope(globalScope, normalizers, null, reference.getEReferenceType(), isIgnoreCase(reference));
+ }
+ return getResourceScope(globalScope, context, reference);
+ }
+
+ override protected internalGetAllDescriptions(Resource resource) {
+ val allContents = new Iterable<EObject>() {
+ override Iterator<EObject> iterator() {
+ return EcoreUtil.getAllContents(resource, false).filter(c|!(c instanceof Variable));
+ }
+ };
+ val allDescriptions = Scopes.scopedElementsFor(allContents, qualifiedNameProvider);
+ return new MultimapBasedSelectable(allDescriptions);
+ }
+
+}