Xtext - как ссылаться на элемент элемента

Используя пример простого объекта 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?

Благодарность


person Razie    schedule 06.06.2016    source источник


Ответы (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)

    }

}
person Christian Dietrich    schedule 07.06.2016