我正在尝试自定义范围,这样如果我在我的语言中有类似函数的东西获取参数,我希望这些参数只有在有分号时才可见,并且超出此范围,我希望它不会可见。
我尝试在文件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);
}
我做错了什么?
感谢!!!
答案 0 :(得分:1)
问题是,使用Xtext 2.9 + AbstractDeclarativeScopeProvider
不再是YourdslScopeProvider
的默认超类。您应该覆盖getScope(EObject context, EReference ref)
,如果在那里徘徊,请做。或者手动更改超类。顺便说一句,您可以使用YourdslPackage.Literals
中的常量,而不是使用手动字符串常量。