diff options
Diffstat (limited to 'rba.tool.editor/src/rba/tool/editor/scoping/internal/RBAModelMemberFieldScopes.xtend')
-rw-r--r-- | rba.tool.editor/src/rba/tool/editor/scoping/internal/RBAModelMemberFieldScopes.xtend | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/rba.tool.editor/src/rba/tool/editor/scoping/internal/RBAModelMemberFieldScopes.xtend b/rba.tool.editor/src/rba/tool/editor/scoping/internal/RBAModelMemberFieldScopes.xtend new file mode 100644 index 0000000..a2c9b6f --- /dev/null +++ b/rba.tool.editor/src/rba/tool/editor/scoping/internal/RBAModelMemberFieldScopes.xtend @@ -0,0 +1,31 @@ +package rba.tool.editor.scoping.internal + +import org.eclipse.emf.ecore.EObject +import org.eclipse.xtext.EcoreUtil2 +import org.eclipse.xtext.scoping.IScope +import org.eclipse.xtext.scoping.Scopes +import rba.core.AbstractProperty +import rba.core.Content +import rba.core.ContentState +import rba.core.Scene +import rba.core.State +import rba.tool.editor.scoping.IExpressionScope + +class RBAModelMemberFieldScopes implements IMemberFeatureScopes { + + override createFeatureScope(EObject model) { + createFeatureScope(model, IExpressionScope.Anchor.UNKNOWN, IScope.NULLSCOPE); + } + + override createFeatureScope(EObject model, IExpressionScope.Anchor anchor, IScope outer) { + if (model instanceof Scene) { + return Scopes.scopeFor(EcoreUtil2.getAllContentsOfType(model, AbstractProperty), outer); + } else if (model instanceof Content) { + return Scopes.scopeFor(EcoreUtil2.getAllContentsOfType(model, ContentState), outer); + } else if (model instanceof State) { + return Scopes.scopeFor(EcoreUtil2.getAllContentsOfType(model, State), outer); + } else { + return outer; + } + } +} |