我正在尝试自定义作用域,这样,如果我的语言中有类似函数的东西可以获取参数,我希望这些参数仅在出现分号之前才可见,而在这个范围之外,我希望它不可见。
我尝试在文件 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);
}
我究竟做错了什么?
谢谢!!!
问题是 Xtext 2.9+AbstractDeclarativeScopeProvider
不再是默认的超类YourdslScopeProvider
。您应该覆盖getScope(EObject context, EReference ref)
并在那里执行 if else 操作。或者您手动更改超类。顺便说一句,你可以使用常量YourdslPackage.Literals
而不是使用手动字符串常量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)