每当我尝试访问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坐标。
答案 0 :(得分:2)
Hi xtext可以在不同的阶段进行索引和链接。因此,您不能在名称提供程序中访问交叉引用。您可以使用NodeModelUtil.findNodesForFeature检索nameprovider中的链接文本