xtext自定义范围:函数的参数

时间:2016-07-28 12:52:59

标签: eclipse parameters xtext scoping

我正在尝试自定义范围,这样如果我在我的语言中有类似函数的东西获取参数,我希望这些参数只有在有分号时才可见,并且超出此范围,我希望它不会可见。

我尝试在文件MyDslScopeProvider.xtend中重新定义方法getScope()

在getScope中我做了类似的事情:

 if (EclassName=="TypedParam" && EFeatureName=="type" && contextType == "TypedParam"){
        return Scopes.scopeFor(Collections.singleton(context),IScope.NULLSCOPE)
    }

这是不可行的(它不能识别参数)。我该怎么办?

此外,我有另一个问题: 我尝试了类似的实现方法:

def IScope scope_<EClass name>_<EFeature name>(<context type> context, EReference)

虽然我打印了名字,但我确保我写的名字是正确的,这些方法根本就没有打过电话。 (我复制了以下代码中打印的内容)

class DomainmodelScopeProvider extends AbstractDomainmodelScopeProvider {
    override def IScope getScope(EObject context, EReference reference)
    {

        System.out.println("scope_" + reference.getEContainingClass().getName()
             + "_" + reference.getName()
             + "(" + context.eClass().getName() + ", ..)"
        );

        return super.getScope(context,reference);                   
    }

我做错了什么?

感谢!!!

1 个答案:

答案 0 :(得分:1)

问题是,使用Xtext 2.9 + AbstractDeclarativeScopeProvider不再是YourdslScopeProvider的默认超类。您应该覆盖getScope(EObject context, EReference ref),如果在那里徘徊,请做。或者手动更改超类。顺便说一句,您可以使用YourdslPackage.Literals中的常量,而不是使用手动字符串常量。