Xtext ScopeProvider:访问上下文对象会导致错误

时间:2014-07-18 16:19:38

标签: xtext xtend

每当我尝试访问ScopeProvider中的上下文对象时,我都会得到“循环解析延迟链接”错误,或者我的ScopeProvider将被完全忽略并使用默认范围

下面是一个小例子语法:

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
    (greetings+=Greeting)*
    (farewells+=Farewell)*;

Greeting:
    'Hello' name=ID '!';

Farewell:
    'Bye' name=[Greeting] '.';

这是ScopeProvider:

class MyDslScopeProvider extends org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider {

def scope_Farewell_name(Farewell context,EReference reference){
    System.out.println(context.name);
    return IScope::NULLSCOPE
}
}

我的做法有问题吗?

为什么我要访问上下文:

我正在尝试为GLSL着色语言创建一个编辑器。我需要区分结构成员和字段选择运算符:示例:

struct Test{
vec4 x;
};

Test s;
s.x.x=5.0;

第一个x是结构成员,第二个是向量的x坐标。

1 个答案:

答案 0 :(得分:2)

Hi xtext可以在不同的阶段进行索引和链接。因此,您不能在名称提供程序中访问交叉引用。您可以使用NodeModelUtil.findNodesForFeature检索nameprovider中的链接文本