【问题标题】:Xtext - how to reference an element of an elementXtext - 如何引用元素的元素
【发布时间】:2016-06-07 11:49:11
【问题描述】:

使用简单实体示例https://eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html

如何添加如下内容:

Map:
    'map' entityA=[Entity] '.' featureA=[Feature] '=>' entityZ=[Entity] '.' featureZ=[Feature]
;  

这样我就可以写了:

entity A {
  name:String
}
entity B {
  name:String
}
map A.name => B.name

以便我在编写 A. 时获得内容帮助,仅限于 A 的功能?

谢谢

【问题讨论】:

    标签: xtext


    【解决方案1】:

    您通常通过调整“范围界定”的概念来做这些事情。内容辅助通常尊重范围。所以像这样调整你的范围提供者

    package org.xtext.example.mydsl1.scoping
    
    import org.eclipse.emf.ecore.EObject
    import org.eclipse.emf.ecore.EReference
    import org.eclipse.xtext.scoping.IScope
    import org.xtext.example.mydsl1.myDsl.Map
    import org.xtext.example.mydsl1.myDsl.MyDslPackage
    import org.eclipse.xtext.scoping.Scopes
    
    class MyDslScopeProvider extends AbstractMyDslScopeProvider {
    
        override getScope(EObject context, EReference reference) {
            if (reference === MyDslPackage.Literals.MAP__FEATURE_A) {
                if (context instanceof Map) {
                    return Scopes.scopeFor(context.entityA.features)
                }
                return IScope.NULLSCOPE
            }
            if (reference === MyDslPackage.Literals.MAP__FEATURE_Z) {
                if (context instanceof Map) {
                    return Scopes.scopeFor(context.entityZ.features)
                }
                return IScope.NULLSCOPE
            }
    
            super.getScope(context, reference)
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多