首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >xtext自定义范围:函数的参数

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

Stack Overflow用户
提问于 2016-07-28 20:52:59
回答 1查看 428关注 0票数 3

我正在尝试自定义作用域,这样,如果在我的语言中有类似函数的东西来获取参数,我希望这些参数只在有分号之前是可见的,而在这个作用域之外,我希望它是不可见的。

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

在getScope中,我做了这样的事情:

代码语言:javascript
运行
复制
 if (EclassName=="TypedParam" && EFeatureName=="type" && contextType == "TypedParam"){
        return Scopes.scopeFor(Collections.singleton(context),IScope.NULLSCOPE)
    }

这很可能不起作用(它不能识别参数)。我该怎么做呢?

此外,我还有另一个问题:我尝试实现了如下方法:

代码语言:javascript
运行
复制
def IScope scope_<EClass name>_<EFeature name>(<context type> context, EReference)

尽管我打印了名称,并确保名称正确,但这些方法根本不会调用。(我复制了以下代码中打印的内容)

代码语言:javascript
运行
复制
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);                   
    }

我做错了什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 13:01:53

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38636968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档