xtext 自定义作用域:函数的参数

xtext custom scoping: parameters of function

我正在尝试自定义范围,这样如果我在我的语言中有类似函数的东西来获取参数,我希望这些参数只在出现分号之前可见,并且在这个范围之外,我想要它不可见。

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

在 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);                   
    }

我做错了什么?

谢谢!!!

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